为什么我们不能使用Child类Reference指向Parent类对象。
class Abc
{
public void Message()
{
System.out.println("Abc");
}
}
class pqr extends Abc
{
public void Message()
{
System.out.println("pqr");
}
}
class test1
{
public static void main (String [] ars)
{
Abc a = new Abc();
a.Message();
Abc b = new pqr();
b.Message();
pqr c = new pqr();
c.Message();
//pqr d = new Abc();
}
}
所以我的问题是如果Abc b = new pqr();
是可能的,那么为什么不pqr d = new Abc()
;(因为pqr是一个子类,它将具有父类的所有功能。)
我只是想检查一下我是在做d.Message()
它将打印的内容是父类方法还是子类方法。
由于
答案 0 :(得分:9)
简单,每只狼都是动物,但不是每只动物都是狼。
因此Abc b = new pqr()
有效,但pqr d = new Abc()
无效。
答案 1 :(得分:1)
用简单的语言解释,父母创造孩子(或生孩子)孩子不要创造父母。由于OOP从现实世界实体中获取概念,因此孩子创建其父项是错误的。
现在变得技术化了。在编译时,JAVA通过引用变量的类型而不是实际对象来调用对象的方法和属性。实际对象只能在运行时知道。因此,假设您在Class Pqr中有一个方法(请习惯使用类名称的大写字符)public void sayHello()。 Pqr类扩展了Abc。现在,如果Java允许使用子引用创建父对象,那么您将以这种方式创建对象
Pqr d = new Abc()
现在因为d的类型是Pqr,所以在调用时
d.sayHello()
编译器会认为你是从类Pqr调用方法。但是在你的实际对象Abc的运行时,没有sayHello()。它会崩溃。因此,在编译时本身不允许使用子引用创建父对象。我希望这可以解除你的怀疑。