在这样的情况下:
class A{
public int x = 4;
public void s3(){
x = 3;
}
public void f(){
x = 8;
s3();
}
}
class B extends A{
public int x = 5;
public void f(){
x = 10;
s3();
}
}
A a = new B();
B b = (B) a;
a.f();
System.out.println(b.x);
System.out.println(a.x);
a.f()
调用f()
类的B
,然后f()
在赋值后调用s3()
函数。此时,s3()
仅定义在A
和 将值 3 分配给 时x
,x
是类拥有的变量的副本A
。为什么s3()
不使用x
声明的 in B
?理论上,B
不应该有自己的s3()
函数副本继承自A
? (所以s3()
继承自A
inB
应该使用x
声明的 in B
)