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