用Java编译对象

用Java编译对象

我对在Java中强制转换对象意味着什么感到困惑。

说你有......

Superclass variable = new Subclass object();(Superclass variable).method();

这里发生了什么?变量类型是否更改,或者变量中的对象是否更改?非常困惑。


慕哥9229398
浏览 450回答 3
3回答

慕姐4208626

您引用的示例在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())。你不能要求机器参考快速。:)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java