创建对象

时间:2017-03-27 12:54:36

标签: java inheritance constructor

当我通过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();替换它,我会得到一个"类型不匹配"错误。

为什么?

1 个答案:

答案 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();

所以编译器不高兴,因为你的妻子送你买狒狒而你带给她一只通用的动物(也许是蛇怪?):)