赋值是Ada中派生类型和子类型之间的唯一区别吗?

时间:2018-06-21 11:29:55

标签: ada derived-types subtyping

我已经了解到,派生类型与它们各自的父代完全不同,但是它们确实继承了其父代的所有操作。

换句话说,您可以将派生类型public Integer evaluate() { Integer xE = x.evaluate(), yE = y.evaluate(); if(yE == 0){ // your logic here if it is a division by 0 } return xE / yE; } 传递给一个操作,该操作接收作为参数A的类型B的父对象。但是,您无法将类型A的变量分配给类型A的变量,反之亦然。

根据上述,派生类型和子类型之间的唯一区别是赋值。是吗?

1 个答案:

答案 0 :(得分:4)

派生类型仅继承其派生类型的原始操作

从技术上讲,类型派生会创建一组新的原始操作,因此您不能“将派生类型A传递给将类型B作为参数{{1 }}的父母”。但是,编译器会创建具有相同名称和实现的操作,这些操作根据类型A的原始操作在类型A上进行。例如,您可以通过将继承的操作显式声明为抽象来删除它们。