This question already has answers here:
Why superclass object cannot be implicitly converted to subclass object in Java?
                                
                                    (4个答案)
                                
                        
                2年前关闭。
            
        

您好无法理解为什么子类变量无法按以下代码引用超类对象。

class Superclass{
}

class Subclass extends Superclass{
}

public class DemoClass {

    public static void main(String[] args) {

        Superclass obj = new Subclass();   //Valid
        Subclass obj2 = new Superclass();  //Invalid

    }

}

最佳答案

Subclass的实例始终也是Superclass的实例,因此您可以分配

Superclass obj = new Subclass();


另一方面,并​​非Superclass的所有实例都是Subclass的实例,因此不能将Superclass实例分配给Subclass变量。

Superclass的某些实例也是Subclass的实例,因此您可以将Superclass实例强制转换为Subclass以便进行分配:

    Superclass obj = new Subclass();
    Subclass obj2 = (Subclass) obj;


但是,但是在您的示例(Subclass obj2 = new Superclass();)中,您试图将不是Subclass的实例分配给Subclass变量,因此即使强制转换也无法正常工作。

关于java - 为什么声明为Subclass类型的引用不能引用Super类的Object? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44481640/

10-09 17:32