WEBその他

【Java】superの使い方について

WEB
この記事は約5分で読めます。

はじめに

株式会社impl奈良です。

Javaプログラミングにおいて、継承(Inheritance)はクラス間でコードを再利用するための重要な機能です。

継承を使うと、あるクラス(サブクラス)が別のクラス(スーパークラス)のフィールドやメソッドを引き継ぐことができます。

この継承の仕組みの中で、superキーワードは非常に重要な役割を果たします。この記事では、superキーワードの基本的な使い方とその役割について詳しく解説します。

superキーワードの基本的な役割

superキーワードは、サブクラスからスーパークラスのメンバ(フィールドやメソッド)にアクセスするために使用されます。これにより、サブクラスはスーパークラスの機能を拡張したり、上書きしたりすることができます。

スーパークラスのフィールドへのアクセス

サブクラスからスーパークラスのフィールドにアクセスするためには、superキーワードを使用します。

// Animal.java
class Animal {
    String name = "Animal"; //フィールド
}

// Dog.java
class Dog extends Animal {
    String name = "Dog"; //フィールド

    void printNames() {
        System.out.println("Name in Dog: " + name);
        System.out.println("Name in Animal: " + super.name);
    }
}

// Main.java
public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.printNames();
    }
}

// 結果
Name in Dog: Dog
Name in Animal: Animal

DogクラスとAnimalクラスの両方にnameというフィールドがあります。DogクラスのprintNamesメソッドでは、super.nameを使ってスーパークラスのnameフィールドにアクセスしています。

その結果、Name in Dog: Dog と Name in Animal: Animal と出力することができます。

スーパークラスのメソッドへのアクセス

サブクラスからスーパークラスのメソッドにアクセスするためにも、superキーワードを使用します。

class Animal {
    void sound() {
        System.out.println("Animal makes a sound");
    }
}

class Dog extends Animal {
    @Override
    void sound() {
        System.out.println("ワンワン");
    }

    void makeSound() {
        super.sound();
        sound();
    }
}

public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.makeSound();
    }
}

// 結果
Animal makes a sound
ワンワン

DogクラスのsoundメソッドはAnimalクラスのsoundメソッドをオーバーライドしています。DogクラスのmakeSoundメソッドでは、super.sound()を使ってスーパークラスのsoundメソッドを呼び出しています。

その結果、Animal makes a sound と ワンワンと出力することができます。

コンストラクタにおけるsuperの使用

superキーワードは、サブクラスのコンストラクタからスーパークラスのコンストラクタを呼び出すためにも使用されます。これにより、スーパークラスの初期化が行われます。

class Animal {
    Animal() {
        System.out.println("Animal is created");
    }
}

class Dog extends Animal {
    Dog() {
        super();
        System.out.println("Dog is created");
    }
}

public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog();
    }
}

// 結果
Animal is created
Dog is created

Dogクラスのコンストラクタ(Dog())でsuper()を使って、Animalクラスのコンストラクタ(Animal())を呼び出しています。

その結果、Animal is created と Dog is created と出力することができます。

まとめ

superキーワードは、Javaにおける継承のメカニズムを理解し、効果的に活用するための重要なツールです。

superを使用することで、サブクラスからスーパークラスのフィールドやメソッドにアクセスしたり、スーパークラスのコンストラクタを呼び出せるため、コードの再利用性と拡張性を高めることができます。

是非、実際のコードでsuperキーワードを使用してみて、その利便性を理解してください!