ホームページ >Java >&#&チュートリアル >Java で静的メソッドをオーバーライドできますか?驚くべき答え。

Java で静的メソッドをオーバーライドできますか?驚くべき答え。

Barbara Streisand
Barbara Streisandオリジナル
2024-10-28 18:04:02498ブラウズ

Can Static Methods be Overridden in Java? The Surprising Answer.

Java での静的メソッドのオーバーライドとオーバーロード

静的メソッドはオブジェクト指向プログラミングに不可欠な部分ですが、Java でのその動作は特にオーバーライドとオーバーロードに関しては、やや混乱する可能性があります。

静的メソッドのオーバーライド

Java では、従来の意味での静的メソッドのオーバーライドは許可されていません。これは、静的メソッドがクラスの特定のインスタンスではなく、クラスにバインドされているためです。したがって、サブクラスが親クラスのメソッドと同じ名前の新しい静的メソッドを定義しても、親メソッドはオーバーライドされません。

非表示とは、メソッドを呼び出すオブジェクトの型に関係なく、コンパイラが常にサブクラスの静的メソッドを呼び出すことを意味します。これは、メソッドが実行時ではなくコンパイル時に解決されるためです。

静的メソッドのオーバーロード

オーバーライドとは異なり、Java の静的メソッドではオーバーロードが可能です。オーバーロードとは、名前は同じだがパラメーター リストが異なる複数のメソッドを持つ機能を指します。 Java では、インスタンス メソッドと同様に、静的メソッドをオーバーロードできます。

次のコードは、静的メソッドのオーバーライドとオーバーロードの違いを示しています。

<code class="java">class Parent {
    public static void method() {
        System.out.println("Parent method");
    }
}

class Child extends Parent {
    // Hides the static method in the parent class
    public static void method() {
        System.out.println("Child method");
    }

    // Overloads the static method in the parent class
    public static void method(int x) {
        System.out.println("Child method with parameter");
    }
}

public class Main {
    public static void main(String[] args) {
        Parent p = new Child();
        p.method(); // Calls the static method in the Child class
        Child.method(); // Also calls the static method in the Child class
        Child.method(10); // Calls the overloaded static method in the Child class
    }
}</code>

出力:

Child method
Child method
Child method with parameter

上記の例では、子クラスのmethod()メソッドが親クラスのmethod()メソッドを隠しています。ただし、子クラスのメソッド(int x)は、親クラスのメソッド()メソッドをオーバーロードします。

以上がJava で静的メソッドをオーバーライドできますか?驚くべき答え。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。