为什么子类的引用变量不能指向父对象?即
Child obj = new Parent();
但是我们可以反之亦然
请回答内存视图(堆)
解决方法:
没有理由与记忆有关.它更简单.子类可以通过添加新方法来扩展其超类的行为.虽然没有给出,但超类具有其子类的所有方法.请看以下示例:
public class Parent {
public void parentMethod() {}
}
public class Child extends Parent {
public void childMethod() {}
}
现在让我们考虑如果您可以将Parent的实例分配给Child类型的变量会发生什么.
Child c = new Parent(); //compiler error
由于c是Child类型,因此允许调用方法childMethod().但由于它实际上是一个没有此方法的Parent实例,因此会导致编译器或运行时问题(取决于检查何时完成).
反过来没有问题,因为你无法通过扩展类来删除方法.
Parent p = new Child(); //allowed
Child是Parent的子类,因此继承parentMethod().所以你可以节省地调用这个方法.
标签:java,oop,run-time-polymorphism
来源: https://codeday.me/bug/20191003/1850405.html