このような状況では:
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()
使用しないのはなぜですか? 理論的には、から継承された関数の独自のコピーを持つべきではありませんか? (したがって、継承された in は、宣言されたinを使用する必要があります)x
B
B
s3()
A
s3()
A
B
x
B