同様の質問をオンラインで検索しましたが、見つかりませんでした。ということで、こちらに投稿。
次のプログラムで、'i' の値が 100 と出力されるのはなぜですか?
私の知る限り、「これ」は現在のオブジェクトを指します。この場合は「TestChild」で、クラス名も正しく出力されます。しかし、なぜインスタンス変数の値が 200 でないのでしょうか?
public class TestParentChild {
public static void main(String[] args) {
new TestChild().printName();
}
}
class TestChild extends TestParent{
public int i = 200;
}
class TestParent{
public int i = 100;
public void printName(){
System.err.println(this.getClass().getName());
System.err.println(this.i); //Shouldn't this print 200
}
}
さらに、次の出力は期待どおりです。親クラスから「 this.test() 」を呼び出すと、子クラスのメソッドが呼び出されます。
public class TestParentChild {
public static void main(String[] args) {
new TestChild().printName();
}
}
class TestChild extends TestParent{
public int i = 200;
public void test(){
System.err.println("Child Class : "+i);
}
}
class TestParent{
public int i = 100;
public void printName(){
System.err.println(this.getClass().getName());
System.err.println(this.i); //Shouldn't this print 200
this.test();
}
public void test(){
System.err.println("Parent Class : "+i);
}
}