Java super キーワード
1. Java - super キーワードとは?
Javaにおける super キーワードは、サブクラスからその親クラス(スーパークラス)を参照するために使用される参照変数です。
super キーワードの最も一般的な用途は、親クラスとサブクラスで同じ名前のメソッドや属性(フィールド)が存在する場合に、その混同を避けて明示的に親側のメンバーを指定することです。
主に以下の2つの目的で使用されます:
- 親クラスの属性やメソッドへのアクセス
- 親クラスのコンストラクタの呼び出し
1.1 親クラスのメソッドへのアクセス
サブクラスに親クラスと同名のメソッドがある場合(オーバーライド)、super を使うことで親側のメソッドを呼び出すことができます。
例:
class Animal {
public void animalSound() {
System.out.println("動物が音を出します");
}
}
class Dog extends Animal {
public void animalSound() {
super.animalSound(); // 親クラスのメソッドを呼び出し
System.out.println("イヌが鳴きます:バウワウ");
}
}
public class Main {
public static void main(String[] args) {
Dog myDog = new Dog();
myDog.animalSound();
}
}出力結果:
動物が音を出します
イヌが鳴きます:バウワウ 注記: サブクラスでオーバーライド(上書き)したメソッドの中から、あえて親クラスの元の処理を実行したい場合に super を利用します。
2. 親クラスの属性へのアクセス
親クラスとサブクラスで同じ名前の属性(フィールド)を持っている場合も、super を使って親クラスの属性にアクセスできます。
例:
class Animal {
String type = "動物";
}
class Dog extends Animal {
String type = "イヌ";
public void printType() {
System.out.println(super.type); // 親クラスの属性にアクセス
}
}
public class Main {
public static void main(String[] args) {
Dog myDog = new Dog();
myDog.printType();
}
}出力結果:
動物3. 親クラスのコンストラクタの呼び出し
super() を使用すると、親クラスのコンストラクタを呼び出すことができます。これは、共通の初期化ロジックを再利用する場合に非常に便利です。
例:
class Animal {
Animal() {
System.out.println("Animalが作成されました");
}
}
class Dog extends Animal {
Dog() {
super(); // 親クラスのコンストラクタを呼び出し
System.out.println("Dogが作成されました");
}
}
public class Main {
public static void main(String[] args) {
Dog myDog = new Dog();
}
}出力結果:
Animalが作成されました
Dogが作成されました 注記:super() の呼び出しは、サブクラスのコンストラクタ内において、必ず最初のステートメント(最初の行)でなければなりません。これを守らないとコンパイルエラーが発生します。