-1

为什么子类的引用变量不能指向父类的对象?IE

Child obj = new Parent();

但是我们可以反之亦然请用内存视图(堆)回答

4

2 回答 2

4

没有任何理由与记忆有关。这要简单得多。子类可以通过添加新方法来扩展其超类的行为。虽然没有给出,但超类具有其子类的所有方法。举个例子:

public class Parent {
    public void parentMethod() {}
}

public class Child extends Parent {
    public void childMethod() {}
}

现在让我们考虑一下如果您可以将 的实例分配给Parenttype 的变量会发生什么Child

Child c = new Parent(); //compiler error

既然c是类型Child,就可以调用方法childMethod()。但由于它实际上是一个Parent实例,没有此方法,这将导致编译器或运行时问题(取决于检查完成的时间)。

反过来也没有问题,因为你不能通过扩展类来删除方法。

Parent p = new Child(); //allowed

Child是的子类,Parent因此继承了parentMethod(). 所以你可以节省地调用这个方法。

于 2017-04-08T15:54:41.503 回答
-1

答案为时已晚。

我相信我们可以从记忆的角度来解释它。也许我错了,但这就是我对这种情况的看法。

// Assume, Required 2KB for execution
public class Parent {
    public void display(){      
        System.out.println("From Parent");
    }
}

// Total memory required for execution : 4bk
public class Child extends Parent {
    @Override
    public void display() {     
        super.display(); // 2KB
    }
    
    public void sayHello() {     
        System.out.println("From Child - Hello"); // 2KB
    }
}



   //2KB expect    //4KB assigned
     Parent parent = new Child();
        
   //4KB expect    //Only 2KB is assigning
     Child child = new Parent();

这里的 'CHILD' 类变量需要 4KB 内存,但我们试图为其分配 2KB 的 'Parent' 类对象。所以编译器抛出异常。

于 2021-07-17T06:51:55.023 回答