Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaのsuperキーワードとは?使い方とサンプルコードを徹底解説

Javaのsuperキーワードとは

Javaにおけるsuperキーワードは、サブクラスから直接の親クラス(スーパークラス)のメンバーやコンストラクタへアクセスするために使われる重要なキーワードです。主な役割は以下の3つです。

  • 親クラスのインスタンス参照super変数は、直近の親クラスのインスタンスを参照します。
  • 親クラスのメソッド呼び出しsuperを使うことで、オーバーライドされた親クラスのメソッドを呼び出せます。
  • 親クラスのコンストラクタ呼び出しsuper()は親クラスのコンストラクタとして機能し、子クラスのコンストラクタ内では必ず最初の行に記述する必要があります。

特に、オーバーライドされたメソッドのスーパークラス側の処理を実行したい場合に、superキーワードが活用されます。

使用例

以下の例では、DogクラスがAnimalクラスを継承し、move()メソッドをオーバーライドしています。super.move()によって、親クラスのmove()メソッドを明示的に呼び出している点に注目してください。

class Animal {
    public void move() {
        System.out.println("Animals can move");
    }
}
class Dog extends Animal {
    public void move() {
        super.move(); // スーパークラスのメソッドを呼び出す
        System.out.println("Dogs can walk and run");
    }
}
public class TestDog {
    public static void main(String args[]) {
        Animal b = new Dog(); // Animal型の参照だがDogオブジェクト
        b.move(); // Dogクラスのメソッドが実行される
    }
}

実行結果

このプログラムを実行すると、次のような出力が得られます。

Animals can move
Dogs can walk and run

動作のポイント

この例で重要なのは、変数bAnimal型の参照でありながら、実際にはDogオブジェクトを保持しているという点です。そのため、b.move()を呼び出すと、ポリモーフィズム(多態性)の仕組みによって、Dogクラスでオーバーライドされたmove()メソッドが実行されます。

さらに、その内部でsuper.move()が呼ばれるため、まず親クラスAnimalの「Animals can move」が出力され、続けて子クラスの「Dogs can walk and run」が出力されるという流れになります。このようにsuperキーワードを使えば、オーバーライド後も親クラスの処理を再利用でき、コードの重複を避けながら柔軟な設計が可能になります。

  1. Javaのfinalキーワードとは?変数・メソッド・クラスでの使い方を解説

    finalは、Javaにおける非アクセス修飾子のひとつです。クラス、メソッド、変数の実装を「確定」させるために使用され、これらが後から変更されることを防ぐ役割を持ちます。本記事では、finalキーワードの基本的な概念と、変数・メソッド・クラスそれぞれでの使い方をコード例とともに解説します。final変数final変数は、明示的に初期化できるのは一度だけです。また、finalで宣言された参照変数は、別のオブジェクトを参照するように再代入することはできません。ただし、オブジェクト内部のデータ自体は変更可能です。つまり、オブジェクトの「状態」は変えられるものの、「参照先」は変えられないという点に注意

  2. Javaの集約(Aggregation)とは?HAS-A関係の基本をわかりやすく解説

    Javaにおける集約(Aggregation)とは、オブジェクト指向プログラミングにおける「HAS-A関係」を表す概念です。あるクラスが、別のクラスのオブジェクトを「持っている(has-a)」という関係性を指します。まずは具体的な例を見てみましょう。集約のコード例public class Vehicle{} public class Speed{} public class Van extends Vehicle { private Speed sp; }この例では、VanクラスがSpeedクラスのインスタンスをフィールドとして保持しています。つまり、「VanはSpeedを持っている(