用Java编译对象我对在Java中强制转换对象意味着什么感到困惑。说你有......Superclass variable = new Subclass object();(Superclass variable).method();这里发生了什么?变量类型是否更改,或者变量中的对象是否更改?非常困惑。
3 回答
慕姐4208626
TA贡献1852条经验 获得超7个赞
您引用的示例在java中称为Upcasting。
它创建了一个子类对象,其中一个超类变量指向它。
变量不会改变,它仍然是超类的变量,但它指向子类的对象。
例如,假设您有两个类机器和相机; Camera是Machine的子类
class Machine{ public void start(){ System.out.println("Machine Started"); }}class Camera extends Machine{ public void start(){ System.out.println("Camera Started"); } public void snap(){ System.out.println("Photo taken"); } }Machine machine1 = new Camera();machine1.start();
如果你执行上面的语句,它将创建一个Camera类的实例,其引用指向它的Machine类。因此,现在输出将是“ Camera Started ”该变量仍然是Machine类的引用。如果您尝试machine1.snap();
代码将无法编译
这里的内容是所有相机都是机器,因为相机是机器的子类,但所有机器都不是相机。因此,您可以创建子类的对象并将其指向超类引用,但您不能要求超类引用执行子类对象的所有功能(在我们的示例中machine1.snap()
不会编译)。超类引用只能访问超类已知的函数(在我们的示例中machine1.start()
)。你不能要求机器参考快速。:)
添加回答
举报
0/150
提交
取消