工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Java

ジャワスーパー

Java スーパー

このチュートリアルでは、例を使って Java の super キーワードについて学びます。

super Java のキーワードは、スーパークラスのメンバー (属性、コンストラクター、およびメソッド) にアクセスするためにサブクラスで使用されます。

super について学ぶ前に キーワード、Java の継承について理解しておいてください。


スーパー キーワードの使用

<オール>
  • サブクラスでオーバーライドされたスーパークラスのメソッドを呼び出すこと。
  • スーパークラスとサブクラスの両方に同じ名前の属性がある場合、スーパークラスの属性 (フィールド) にアクセスします。
  • スーパークラスの引数なし (デフォルト) またはパラメーター化されたコンストラクターをサブクラスのコンストラクターから明示的に呼び出す。
  • これらの用途をそれぞれ理解しましょう。


    1.スーパークラスのオーバーライドされたメソッドへのアクセス

    スーパークラスとサブクラスの両方で同じ名前のメソッドが定義されている場合、サブクラスのメソッドがスーパークラスのメソッドをオーバーライドします。これはメソッドのオーバーライドと呼ばれます。

    例 1:メソッドのオーバーライド

    class Animal {
    
      // overridden method
      public void display(){
        System.out.println("I am an animal");
      }
    }
    
    class Dog extends Animal {
    
      // overriding method
      @Override
      public void display(){
        System.out.println("I am a dog");
      }
    
      public void printMessage(){
        display();
      }
    }
    
    class Main {
      public static void main(String[] args) {
        Dog dog1 = new Dog();
        dog1.printMessage();
      }
    }
    

    出力

    I am a dog
    

    この例では、オブジェクト dog1 を作成することにより、 の クラス、そのメソッド printMessage() を呼び出すことができます 次に display() を実行します

    display()以降 サブクラス Dog のメソッドは両方のクラスで定義されています スーパークラス Animal のメソッドをオーバーライドします .したがって、display() のサブクラスが呼び出されます。

    スーパークラスのオーバーライドされたメソッドを呼び出さなければならない場合は?

    super.display() を使用します オーバーライドされたメソッド display() の場合 スーパークラス Animal

    例 2:スーパークラス メソッドを呼び出す super

    class Animal {
    
      // overridden method
      public void display(){
        System.out.println("I am an animal");
      }
    }
    
    class Dog extends Animal {
    
      // overriding method
      @Override
      public void display(){
        System.out.println("I am a dog");
      }
    
      public void printMessage(){
    
        // this calls overriding method
        display();
    
        // this calls overridden method
        super.display();
      }
    }
    
    class Main {
      public static void main(String[] args) {
        Dog dog1 = new Dog();
        dog1.printMessage();
      }
    }
    

    出力

    I am a dog
    I am an animal
    

    ここで、上記のプログラムがどのように機能するかを説明します。


    2.スーパークラスの属性にアクセス

    スーパークラスとサブクラスは、同じ名前の属性を持つことができます。 super を使用します スーパークラスの属性にアクセスするためのキーワード。

    例 3:スーパークラス属性にアクセスする

    class Animal {
      protected String type="animal";
    }
    
    class Dog extends Animal {
      public String type="mammal";
    
      public void printType() {
        System.out.println("I am a " + type);
        System.out.println("I am an " + super.type);
      }
    }
    
    class Main {
      public static void main(String[] args) {
        Dog dog1 = new Dog();
        dog1.printType();
      }
    }
    

    出力 :

    I am a mammal
    I am an animal
    

    この例では、同じインスタンス フィールド type を定義しています。 スーパークラス Animal の両方で サブクラス Dog .

    次に、オブジェクト dog1 を作成しました の クラス。次に、printType() メソッドは、このオブジェクトを使用して呼び出されます。

    printType() の内部 関数、

    したがって、System.out.println("I am a " + type); 私は哺乳類です .そして、System.out.println("I am an " + super.type); 私は動物です .


    3.スーパークラス コンストラクターにアクセスするための super() の使用

    ご存知のように、クラスのオブジェクトが作成されると、そのデフォルト コンストラクターが自動的に呼び出されます。

    サブクラス コンストラクターからスーパークラス コンストラクターを明示的に呼び出すには、super() を使用します。 . super の特別な形式です キーワード。

    super() サブクラスのコンストラクター内でのみ使用でき、最初のステートメントでなければなりません。

    例 4:super() の使用

    class Animal {
    
      // default or no-arg constructor of class Animal
      Animal() {
        System.out.println("I am an animal");
      }
    }
    
    class Dog extends Animal {
    
      // default or no-arg constructor of class Dog
      Dog() {
    
        // calling default constructor of the superclass
        super();
    
        System.out.println("I am a dog");
      }
    }
    
    class Main {
      public static void main(String[] args) {
        Dog dog1 = new Dog();
      }
    }
    

    出力

    I am an animal
    I am a dog
    

    ここで、オブジェクト dog1 の場合 の クラスが作成されると、そのクラスのデフォルトまたは引数なしのコンストラクターが自動的に呼び出されます。

    サブクラス コンストラクター内では、super() statement はスーパークラスのコンストラクターを呼び出し、その中のステートメントを実行します。したがって、 私は動物です という出力が得られます .

    その後、プログラムの流れはサブクラスのコンストラクターに戻り、残りのステートメントを実行します。したがって、 私は犬です 印刷されます。

    ただし、 super() を使用 必須ではありません。 super() であっても がサブクラス コンストラクターで使用されていない場合、コンパイラーはスーパークラスの既定のコンストラクターを暗黙的に呼び出します。

    では、コンパイラが自動的に super() を呼び出すのに、なぜ冗長なコードを使用するのでしょうか?

    パラメータ化されたコンストラクタ (引数を取るコンストラクタ) の場合は必須です

    パラメータ化された super() サブクラスのコンストラクター本体の最初のステートメントでなければなりません。そうしないと、コンパイル エラーが発生します。

    例 5:super() を使用してパラメーター化されたコンストラクターを呼び出す

    class Animal {
    
      // default or no-arg constructor
      Animal() {
        System.out.println("I am an animal");
      }
    
      // parameterized constructor
      Animal(String type) {
        System.out.println("Type: "+type);
      }
    }
    
    class Dog extends Animal {
    
      // default constructor
      Dog() {
    
        // calling parameterized constructor of the superclass
        super("Animal");
    
        System.out.println("I am a dog");
      }
    }
    
    class Main {
      public static void main(String[] args) {
        Dog dog1 = new Dog();
      }
    }
    

    出力

    Type: Animal
    I am a dog
    

    コンパイラは、引数なしのコンストラクターを自動的に呼び出すことができます。ただし、パラメーター化されたコンストラクターを呼び出すことはできません。

    パラメーター化されたコンストラクターを呼び出す必要がある場合は、サブクラス コンストラクターで明示的に定義する必要があります。

    上記の例では、パラメーター化されたコンストラクター super("Animal") を明示的に呼び出していることに注意してください。 .この場合、コンパイラはスーパークラスのデフォルト コンストラクタを呼び出しません。


    Java

    1. Java オペレーター
    2. Java コメント
    3. Java if...else ステートメント
    4. Java for-each ループ
    5. Java 文字列
    6. Java インターフェイス
    7. Java匿名クラス
    8. Java try-with-resources
    9. Java アノテーション
    10. Java アサーション
    11. Java ベクトル