一般的にオーバーライドは、サブクラスのメンバーの意味を再定義するという概念です.Javaでオーバーライドしている間、変数がメソッドのように動作しないのはなぜですか?
例えば:
class Base {
int a = 10;
void display() {
System.out.println("Inside Base :");
}
}
class Derived extends Base {
int a = 99;
@Override
// method overriding
void display() {
System.out.println("Inside Derived :");
}
}
public class NewClass {
public static void main(String... a) {
Derived d = new Derived();
Base b = d;
b.display(); // Dynamic method dispatch
System.out.println("a=" + b.a);
}
}
データメンバはパッケージアクセス指定なので、クラスa
でも利用可能です。Derived
しかし、通常、基本クラスの参照を使用してオーバーライドされたメソッドを呼び出している間、派生クラスで再定義されたメソッドが呼び出されます (動的メソッド ディスパッチ)..しかし、変数については同じではありません..なぜ.?
期待される出力
内部派生:
a=99
得られた出力:
内部派生:
a=10
出力 10 - 変数が派生クラスのメソッドと同様に動作しないのはなぜですか?
サブクラスで変数をオーバーライドできないのはなぜですか?