1. ホーム
  2. java

[解決済み] Javaでは静的メソッドは継承されるのですか?

2022-04-24 19:45:55

質問

を読んでいました。 プログラマーズ・ガイド・トゥ Java™ SCJP認定資格 Khalid Mughal著。

継承の章では、次のように説明されています。

メンバの継承は、宣言されたメンバと密接に結びついています。 アクセシビリティがあります。スーパークラスのメンバが、単純にその名前 のような特別な構文を使用せずに)サブクラスでその メンバは継承されたものとみなされます。

また、静的メソッドは継承されないと書かれています。しかし、以下のコードでは全く問題ありません。

class A
{
    public static void display()
    {
        System.out.println("Inside static method of superclass");
    }
}

class B extends A
{
    public void show()
    {
        // This works - accessing display() by its simple name -
        // meaning it is inherited according to the book.
        display();
    }
}

を直接使用するにはどうすればよいのでしょうか? display() クラス内の B ? さらにもっと B.display() も動作します。

この本の説明は、インスタンスメソッドにしか適用されないのでしょうか?

どのように解決するのですか?

アクセス可能なすべてのメソッドはサブクラスに継承されます。

SunのJavaより チュートリアル :

サブクラスは、そのサブクラスがどのパッケージ内にあるかにかかわらず、親のパブリックおよびプロテクトされたメンバをすべて継承します。サブクラスが親と同じパッケージ内にある場合は、親のパッケージ非公開メンバも継承します。継承したメンバは、そのまま使用することも、置き換えることも、隠すことも、新しいメンバで補完することも可能です。

継承された静的(クラス)メソッドと継承された非静的(インスタンス)メソッドの唯一の違いは、同じ署名の新しい静的メソッドを書いたとき、古い静的メソッドはオーバーライドされず、ただ隠されることです。

より ページ オーバーライドと隠蔽の違いについて。

<ブロッククオート

隠蔽とオーバーライドの区別は、重要な意味を持ちます。オーバーライドされたメソッドが呼び出されるのは、サブクラス内のメソッドのバージョンです。呼び出される非表示メソッドのバージョンは、それがスーパークラスとサブクラスのどちらから呼び出されるかに依存します。