はじめに
株式会社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
キーワードを使用してみて、その利便性を理解してください!