2017-04-08 107 views
-2

为什么子类的引用变量不能指向父对象?即为什么我不能将父类分配给子类类型的变量?

Child obj = new Parent(); 

但是我们可以做的,反之亦然 请与存储视图(堆)

+0

这与记忆无关。 –

+2

对象类型之间存在层次关系。每个“狗”都是“动物”,但并非每个“动物”都是“狗”。 –

回答

1

没有理由它有事情做与内存回答。它更简单。子类可以通过添加新方法来扩展其超类的行为。虽然没有给出,但超类拥有其子类的所有方法。看看下面的例子:

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 

ChildParent一个子类,因此继承了parentMethod()。所以你可以保存地调用这个方法。

+0

谢谢SilverNak^_ ^ –

相关问题