Java 是一种强类型语言。
标准转换和自动升级适用于原始类型。
严格执行类型兼容性。
通常,一个类的引用变量不能引用另一类的对象。
即使类 X 和 Y 在结构上相同,也不可能将 X 的引用分配给 Y 的对象,因为类型不同。
一般来说,对象引用变量只能引用其类型的对象。
类型强加的例外是超类的引用变量可以引用从该超类派生的任何子类的对象。
由于 Y 源自 X,因此允许 x2 接收对 Y 对象的引用。
引用变量的类型,而不是它引用的对象的类型,决定了可以访问的成员。
当子类对象的引用被赋值给超类变量时,只能访问超类定义的成员。
在示例中,x2 无法访问 Y 的成员 b,因为类 X 不知道子类添加的成员。
分配给超类变量的子类引用很常见,尤其是在类层次结构中调用构造函数时。
子类可以受益于将超类中的对象作为参数的构造函数,从而允许创建对象的副本。
在此程序中,t2 由 t1 构造而成,因此是相同的。
此三角形生成器的注意事项:
// 从另一个对象构造一个对象。
三角形(三角形ob) {
超级(ob); // 将对象传递给 TwoDShape
的构造函数
样式 = ob.style;
}
它接收一个 Triangle 类型的对象并将其(通过 super)传递给此 TwoDShape 构造函数:
//从另一个对象构造一个对象。
TwoDShape(TwoDShape ob) {
宽度 = ob.width;
高度 = ob.height;
}
TwoDShape() 构造函数期望接收 TwoDShape 类型的对象。
Triangle() 子类的构造函数向其传递一个 Triangle 类型的对象。
这是有效的,因为来自超类(如 TwoDShape)的引用可以引用来自子类(如 Triangle)的对象。
将派生类的对象的引用传递给超类的构造函数是可以接受的。
超类构造函数 TwoDShape() 仅初始化属于 TwoDShape 类的成员,而不考虑 Triangle 子类的其他成员。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3