このコードを見てください:
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 の参照をPolymorphism
type の変数Foo
、古典的な多態性に代入します。ここaddFive
で、クラスでオーバーライドされたメソッドを呼び出しますPolymorphism
。次に、クラス Polymorphism でオーバーライドされた getter メソッドから変数値を出力します。したがって、答えは 10 になります。しかし、パブリック変数a
が SOP されると、答えは 3 になります!!
どうしてそうなった?参照変数の型が Foo なのに、Polymorphism クラスのオブジェクトを参照していました。では、なぜアクセスf.a
してもクラスの a の値が出力されないのPolymorphism
でしょうか? 助けてください