継承されて静的メソッドをオーバーライドすることはできません

このリンク:https://blog.csdn.net/gao_zhennan/article/details/72892946

彼は非常に明確に説明しました

答えは明らかです:Javaの静的メソッドをオーバーライドすることはできません。
静的メンバ(メソッドやプロパティ)クラスのメンバは、スタック上に保存されている、クラスが直接呼び出すことができます(静的メンバのクラスに属する、当然のことながら、オブジェクトも呼び出すことができ、ちょうどあなたがそれを使用することができると言う)、店舗、インスタンスメンバーがメンバーであるオブジェクトヒープで、それが唯一のオブジェクトを呼び出すことができます。
作成されたオブジェクトの種類に応じて、書き換えの目的は、多形性を示す属します。オブジェクトを作成せずに静的メソッドを使用することができるからです。いいえオブジェクトは、この要素が存在しないため、書き換えることができない必要な書き換え「オブジェクトは、のタイプに属していません」。

コードのように千個の言葉:

クラスA {
     パブリック 静的ショー(){ 
        システム。アウト .println(Aの静的メソッド)。
    } 
} 
クラスBは{延び
     パブリック 静的ショー(){ 
        システム。アウト .println(Bの静的メソッド)。

    } 
}

その結果、それは明らかです。それが書き換えられた場合、結果はBのx.show静的メソッドであるべきで、その結果は、アプリケーション・オブジェクトと各動作の結果、クラスに関連することを示しています。だから、静的メンバーは、クラスに属します。

だから、どのようにB中関係のショーとそれのショーを記述するために?書き換えの代わりに、実際には、(上記の認証方法のコードを参照してください)オーバーロードされていない
実際には、彼らの関係はなることができます:再定義します!メンバークラスを再定義。
たとえば、次の
スーパークラスから得られた1サブクラスで再定義する属性

クラス A { 公共 int型のx = 5 ;}
 クラス Bが延びる{ パブリックブールX = ;} 
A = 新しい B(); BはB = 新しい B();

BはAから継承されたXと呼ばれる属性を、再定義しているので、Xはブロックされました。しかし、それでもまだ、その値はsuper.xすることによって得ることができる
方法、同じ名前のサブクラスの定義スーパークラスのプライベートまたは静的メソッド
民間のスーパークラスのペア。サブクラスを導出することができません、との前提のため、任意のサブクラスのメソッド定義と同じ名前のクラスメソッドでの制限はありません。また、静的メソッドをオーバーライドすることはできませんが、再定義することができます!

 

おすすめ

転載: www.cnblogs.com/gxlaqj/p/11420726.html