为什么B b = new A()无效且A a = new B()在B扩展A时有效?

时间:2014-09-15 16:29:42

标签: java class inheritance

我是JAVA的新手,想知道为什么

A a = new B();

有效 和

B b = new A();

无效 考虑到:

class A;
class B extends A;

3 个答案:

答案 0 :(得分:7)

因为B扩展A,所以A也是B。我们在面向对象术语中说这是A 是-a B。这意味着您可以在使用A的任何地方使用B

此关系不是可交换的 - A是 - A 暗示B是 - A。因此,您无法在使用B的任何地方使用class Animal; class Dog extends Animal;

考虑这种情况:

Animal animal = new Dog();

这是有道理的:

Animal

使用Dog的任何地方都可以使用Dog dog = new Animal(); 。这很直观。

{{1}}

另一方面,这没有意义。

答案 1 :(得分:1)

因为当B扩展A时你认为每个B都是一个更复杂的A,使用A中的属性和方法并添加他自己的一些,但是A不能是B,B中的方法可能没有指定A,因为它没有从B扩展,所以无法实例化。

每个B都是A,但不是每个A都是B(除非你指定)

答案 2 :(得分:-1)

class A { 
   int i = 10;
}

class B {
   int i = 10;
   int j = 20;
}

class C {

   public static void main(String args[]){   
      B b;
      B b=new A();
      System.out.println(b.j);
   }
}