在Ada语言中,一个包的名称和其所包含的子程序、对象等的名称可以不同。这是通过使用“renames”语句来实现的。例如:
package My_Package is
function Do_Something return Boolean;
end My_Package;
package Renamed_Package renames My_Package;
在这个例子中,包My_Package中定义了一个函数Do_Something,并将其重命名为Renamed_Package中的一个子程序。现在问题是如何创建一个继承自Renamed_Package的子类?
答案是使用原始包的名称而不是重命名后的名称来定义一个子类。例如:
with Renamed_Package;
package My_Subpackage is
type Derived_Class is new Renamed_Package.My_Package'Derived_Class
with private;
overriding
function Do_Something return Boolean;
end My_Subpackage;
在这个例子中,My_Subpackage中创建了一个名为Derived_Class的子类,该子类继承自Renamed_Package.My_Package中的Derived_Class,并实现一个重写Do_Something函数的方法。请注意,在派生类型中,需要使用完整的原始包名称(My_Package)。然后,可以在实现中使用其重命名的名称(Renamed_Package)。