Javaによると、インスタンスメソッドの解決は、引数の実行時タイプに基づいています。
ただし、インスタンス変数を解決する際には、以下に示すように異なるアプローチを使用します。
プログラムの出力は..
Child
Parent
ParentNonStatic
ここで、最初の出力は引数の実行時タイプに基づいていますが、3番目の出力はそうではありません。
誰かがこれについて説明できますか?
public class Child extends Parent {
public static String foo = "Child";
public String hoo = "ChildNonStatic";
private Child() {
super(1);
}
@Override
String please() {
return "Child";
}
public static void main(String[] args) {
Parent p = new Parent();
Child c = new Child();
//Resolving method
System.out.println(((Parent) c).please());
//Resolving Static Variable
System.out.println(((Parent) c).foo);
//Resolving Instance Variable
System.out.println(((Parent) c).hoo);
}
}
class Parent {
public static String foo = "Parent";
public String hoo = "ParentNonStatic";
public Parent(int a) {
}
public Parent() {
}
String please() {
return "Tree";
}
}