Javaでオーバーライド機能を使用している間、私は疑念を抱いています。私は、静的メソッドをオーバーライドできないことを読ん静的メソッド継承と静的変数継承の違いは何ですか?
class Vehicle {
static int speed = 50;
public static void display() {
System.out.println(speed);
}
}
class Jeep extends Vehicle {
int speed = 100;
void display() { //GETTING COMPILE TIME ERROR
System.out.println(speed);//will print speed of Bike
}
public static void main(String args[]) {
Jeep b = new Jeep();
System.out.println(b.speed);
}
}
:
は、以下のコードを考えてみましょう。
しかし、上記のコードでは、親クラスのVehicleで静的変数 'speed'を宣言しました。子クラスに同じ名前の 'speed'という名前のインスタンス変数を作成しました。子クラスで静的変数 'speed'の値を変更したため、コンパイル時エラーは発生しませんでした。
表示方法をオーバーライドしようとするとコンパイル時に問題が発生しますが、両方とも親クラスで静的であっても変数 'スピード'を再宣言してもエラーは発生しません。
サブクラスのspeed
変数は、親クラスの静的変数speed
を隠しますが、display
メソッドで同じことを実行せず、コンパイル時のエラーを表示する理由がありますか?
を参照している?上書きすることができない理由については
インスタンスのフィールドまたはメソッド? 'スピード'または 'ディスプレイ'? (それは重要です) –
あなたは子クラスの静的変数 'speed'の何も変更していませんか? – SomeJavaGuy
フィールドは、静的であるかどうかにかかわらず、上書きすることはできません。フィールドに問題はありません。 –