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”管理的“雇员”