Java 使用子类引用创建父类的实例
为什么我们不能使用子类引用指向父类对象Java 使用子类引用创建父类的实例,java,inheritance,Java,Inheritance,为什么我们不能使用子类引用指向父类对象 class Abc { public void Message() { System.out.println("Abc"); } } class pqr extends Abc { public void Message() { System.out.println("pqr"); } } class test1 { public static voi
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();
}
}
所以我的问题是如果abcb=newpqr()代码>是可能的,那么为什么不pqr d=new Abc()
;(因为pqr是一个子类,它将具有父类的所有特性。)
我只是想检查我是否正在执行d.Message()
它将打印什么,是父类方法还是子类方法
谢谢很简单,每只狼都是动物,但不是每只动物都是狼
因此Abc b=new-pqr()
是有效的,但pqr d=new-Abc()
是无效的。用简单的语言解释,父母创造孩子(或生下他们)孩子不创造父母。由于OOPs从现实世界的实体中获取概念,因此子对象创建其父对象是错误的
现在是技术性的。在编译时,JAVA根据引用变量的类型而不是实际对象调用对象上的方法和属性。只有在运行时才能知道实际对象。假设您在类Pqr中有一个方法(请养成使用大写作为类名的习惯)public void sayHello()。Pqr类扩展了Abc。现在,如果Java允许创建带有子引用的父对象,那么您将以这种方式创建一个对象
Pqr d = new Abc()
现在,由于d类型为Pqr,在调用时
d.sayHello()
编译器会认为您正在从类Pqr调用方法。但在实际对象Abc的运行时中,没有sayHello()。它会崩溃的。因此,在编译时本身,不允许使用子引用创建父对象。我希望这能消除你的疑虑。我想这会对你有帮助…pqr d=new Abc()
如果它无效,因为pqr
类是Abc的子类,它应该有能力创建一个Abc对象,它也是一个不同的问题,组合在很大程度上是可能的,也是可能的,但这项任务是不可能的。这是两个完全不同的概念。@looser>例如,假设每个“老板”都是“雇员”。现在我们可以将boss对象分配给employee对象。除此之外,在“boss”类中,它可能有一系列由该“boss”管理的“雇员”