このコードを見てください:
class Foo {
public int a;
public Foo() {
a = 3;
}
public void addFive() {
a += 5;
}
public int getA() {
System.out.println("we are here in base class!");
return a;
}
}
public class Polymorphism extends Foo{
public int a;
public Poylmorphism() {
a = 5;
}
public void addFive() {
System.out.println("we are here !" + a);
a += 5;
}
public int getA() {
System.out.println("we are here in sub class!");
return a;
}
public static void main(String [] main) {
Foo f = new Polymorphism();
f.addFive();
System.out.println(f.getA());
System.out.println(f.a);
}
}
ここでは、class の object の参照をPolymorphismtype の変数Foo、古典的な多態性に代入します。ここaddFiveで、クラスでオーバーライドされたメソッドを呼び出しますPolymorphism。次に、クラス Polymorphism でオーバーライドされた getter メソッドから変数値を出力します。したがって、答えは 10 になります。しかし、パブリック変数aが SOP されると、答えは 3 になります!!
どうしてそうなった?参照変数の型が Foo なのに、Polymorphism クラスのオブジェクトを参照していました。では、なぜアクセスf.aしてもクラスの a の値が出力されないのPolymorphismでしょうか? 助けてください