This question already has answers here:
Why superclass object cannot be implicitly converted to subclass object in Java?
(4个答案)
2年前关闭。
您好无法理解为什么子类变量无法按以下代码引用超类对象。
另一方面,并非
但是,但是在您的示例(
(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