ホームページ  >  記事  >  Java  >  静的キーワード: オーバーロード、オーバーライド、および this と super の役割

静的キーワード: オーバーロード、オーバーライド、および this と super の役割

Barbara Streisand
Barbara Streisandオリジナル
2024-10-26 07:33:30607ブラウズ

Static Keyword: Overloading, Overriding, and the Role of this and super

この投稿では、static のコンテキストにおける メソッドのオーバーロードメソッドのオーバーライド の概念に焦点を当て、static キーワードに関するこれまでの議論を拡張します。方法。また、 this キーワードと super キーワードが静的コンテキストでどのように動作するか (または動作しないか) についても説明します。

静的キーワードを初めて使用する場合は、まず静的変数と静的メソッドを確認すると役立つかもしれません。

この投稿では、静的コンテキストでの this と super の動作について触れているため、This Keyword と Super Keyword についても確認することをお勧めします。


この投稿の主なトピック:

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

  2. 静的メソッドがオーバーライドできないの理由

  3. 静的コンテキストでの this キーワードと super キーワードの使用

  4. 主要な概念を示す例


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

Java では、オーバーロード により、同じ名前のメソッドが異なるパラメータ リストで存在することができます。静的メソッドは、インスタンス メソッドと同様にオーバーロードできます。ただし、オーバーロードはコンパイル時に発生することに注意してください。

コード例:

package keywords.static_keyword;

public class StaticVariables {

    static int idStatic = 1;

    public StaticVariables(String name) {
        this.id = ++idStatic;
        this.name = name;
    }

    int id;
    String name;

    static void displayText() {
        System.out.println("DisplayText called. ID: " + idStatic);
    }

    // Overloaded static method with a parameter
    static void displayText(String name) {
        System.out.println("Overloaded DisplayText called. Name: " + name);
    }

    public static void main(String[] args) {
        StaticVariables.displayText();
        StaticVariables.displayText("Static Overload Example");
    }
}

説明:

  • メソッドのオーバーロード:displayText メソッドは 2 つのバージョンでオーバーロードされます。1 つはパラメータなし、もう 1 つは String パラメータありです。

  • Java はコンパイル時中にパラメータ リストに基づいて 2 つのメソッドを区別できるため、これは 合法です。


2. 静的メソッドをオーバーライドできない理由

Java では静的メソッドのオーバーライドは許可されていません。静的メソッドはオブジェクト インスタンスではなくクラスにバインドされているため、メソッド オーバーライドの基礎であるランタイム ポリモーフィズムには参加しません。

ただし、静的変数は継承され、子クラスからアクセスまたは変更できます。

コード例:

package keywords.static_keyword;

public class StaticVariables {

    static int idStatic = 1;

    public StaticVariables(String name) {
        this.id = ++idStatic;
        this.name = name;
    }

    int id;
    String name;

    static void displayText() {
        System.out.println("DisplayText called. ID: " + idStatic);
    }

    // Overloaded static method with a parameter
    static void displayText(String name) {
        System.out.println("Overloaded DisplayText called. Name: " + name);
    }

    public static void main(String[] args) {
        StaticVariables.displayText();
        StaticVariables.displayText("Static Overload Example");
    }
}

説明:

  • オーバーライドなし: コメントアウトされた @Override メソッドは、静的メソッドをオーバーライドしようとする試みを示しています。オーバーライドはインスタンス メソッドにのみ適用されるため、コンパイル時エラーが発生します。
  • 静的変数の継承: 静的メソッドはオーバーライドできませんが、静的変数は継承され、子クラスでアクセスまたは変更できます。
  • 静的メソッドの呼び出し: 静的メソッドは、クラス名を使用して呼び出すか、同じクラス内にある場合は直接呼び出す必要があります。

3. 静的コンテキストでの this キーワードと super キーワードの使用

  • this Keyword: クラスの現在のインスタンスを参照します。静的メソッドはどのインスタンスでも動作しないため、これを静的コンテキストで使用するとコンパイル時エラーが発生します

例:

package keywords.static_keyword;

public class CannotOverrideStaticMethod extends StaticVariables {

    public CannotOverrideStaticMethod(String name) {
        super(name);
    }

    // Attempting to override the static method 
    // This will cause a compile-time error
    /*
    @Override
    static void displayText() {
        System.out.println("Overridden DisplayText");
    }
    */

    @Override
    void display() {
        // Static variables are inherited from the parent class
        idStatic = 90;  // Access and modify the parent's static variable
        System.out.println("ID: " + idStatic + ", Name: " + name);
        super.display();  // Call the parent class's non-static method
    }

    // Correct way to use static methods from the parent class
    static void displayText() {
        StaticVariables.displayText(); // Call the parent class static method
    }

    public static void main(String[] args) {
        displayText();  // Calls the static method defined in this class
    }
}
  • super Keyword: 同様に、super キーワードは親クラスのインスタンスを参照します。 静的メソッドはインスタンスではなくクラスに属しているため、静的コンテキストでは super も無効です.

例:

static void displayText() {
    // Cannot use 'this' in a static context
    this.display();  // --> Compile-time error
}

追加説明:

  • コンセプト 1: オーバーライドにより、インスタンスに依存する ランタイムポリモーフィズム が有効になります。静的メソッドはインスタンスに関連付けられていないため、オーバーライドできません。ただし、例に示すように、静的変数は継承され、子クラスでアクセスまたは変更できます。
  • コンセプト 2: this と super はどちらも インスタンス を参照します。これは現在のオブジェクトのメンバーを指しますが、super は親オブジェクトのメンバーを指します。静的メソッドはどのインスタンスからも独立して動作するため、静的メソッドまたは静的ブロックでは this も super も使用できません。

4. 重要な概念のまとめ

  • 静的メソッドはオーバーロード可能: 同じ名前でパラメーター リストが異なる複数の静的メソッドを定義できます。これはコンパイル時中に解決されます。
  • 静的メソッドはオーバーライドできません: 静的メソッドはインスタンスではなくクラスに属するため、実行時ポリモーフィズムをサポートしません。
  • 静的変数は継承されます: 親クラスの静的変数は、子クラスでアクセスして変更できます。
  • 静的コンテキストに this または super はありません: 静的メソッドはインスタンスで動作しないため、this キーワードと super キーワードは使用できません。

結論

この投稿では、静的メソッドのオーバーロードとオーバーライドの微妙な違いについて説明し、静的コンテキストで this と super を使用する際の制約について説明し、継承全体で静的変数がどのように動作するかを説明しました。これらの概念は、Java の静的メンバーとインスタンス メンバーがどのように異なるかを理解するために不可欠です。


関連記事

  • Java の基礎

  • アレイインタビューの要点

  • Java メモリの基礎

  • コレクション フレームワークの基本

コーディングを楽しんでください!

以上が静的キーワード: オーバーロード、オーバーライド、および this と super の役割の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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