我是JAVA的新手,想知道为什么
A a = new B();
有效 和
B b = new A();
无效 考虑到:
class A;
class B extends A;
答案 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);
}
}