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

Is assignment the only difference between derived types and subtypes in Ada?

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

换句话说,您可以将派生类型 A 传递给接收类型 B 作为参数的操作,该类型 BA 的父级。但是,您不能将 A 类型的变量分配给 B 类型的变量,反之亦然。

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

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

从技术上讲,类型派生会创建一组新的原始操作,因此您不能 "pass a derived type A to a operation that receives as a parameter a type B which is A's parent"。但是编译器创建了具有相同名称和实现的操作,这些操作从类型 B 的原始操作中作用于类型 A。例如,您可以通过显式声明抽象来删除继承的操作。