当我通过Super Class为subClass创建一个对象作为参考变量时 例如:
class A {
A() { }
}
class B extends A {
B() { }
public static void main(String[] args) {
A a = new B(); // Compiles and runs
B a = new A(); // Does not compile - "Type mismatch" error
}
}
如果我有A a = new B();
,它会编译并运行。如果我用B a = new A();
替换它,我会得到一个"类型不匹配"错误。
为什么?
答案 0 :(得分:0)
原因是类B
比类A
更具体,而类A
的构造函数只创建类A
中的内容。
将A
替换为Animal
,并将B
替换为Baboon
。每个baboon都是动物,但not every animal is a baboon。现在以下内容完全可以:
Animal a = new Baboon();
你要做的是
Baboon a = new Animal();
所以编译器不高兴,因为你的妻子送你买狒狒而你带给她一只通用的动物(也许是蛇怪?):)