所以这是非常基本的,但我无法得到它。让我们假设我们有2类A,B(继承A):Java覆盖参考
class A {
public void m() {System.out.println("AAA");}
}
class B extends A {
public void m() {System.out.println("BBB"); }
}
我们的主类:
class Test{
public static void main(String [] args){
A a=new A(); B b=new B(); A x;
x=a; x.m(); // "AAA"
x=b; x.m(); // "BBB"
a=b; a.m(); // "BBB"
b=a; b.m(); // ERROR
}}
我的理解是 'X' 是A型的空引用,因为没有任何对象被创建。当我键入x = a;对null的引用现在指向A的实例。如果我调用x.m(),它会打印出与AAA =相同的x = b; x.n(); “BBB”;
但是如果我创建了一个实例A,其中'a'是引用并且说b = a;它说错误。找到一个必需的B.
那么我认为'b'的引用被引用'a'覆盖,如果我现在调用b.m();它给了我“AAA”,因为它现在指向A的实例。虽然a = b;用a.m()打印“BBB”
为什么?
实例的超类的不一定是子类的实例... –