Java初心者必見!「this」と「super」の違いと使い方をわかりやすく解説
こんにちは。ゆうせいです。
今回はJavaプログラミングにおいてとても重要なキーワード「this」と「super」について、初めてJavaを学ぶ新人エンジニア向けにわかりやすく解説していきます!
「this」と「super」はクラス(class)やオブジェクト指向(Object-Oriented Programming, OOP)の概念に深く関係しており、使いこなせるとコードの見通しがぐんと良くなります。
「this」とは?自分自身のインスタンスを指す
「this」の基本的な役割
「this」は現在のオブジェクト自身を指します。
もっと言うと、「このクラスから生成された今このインスタンス」という意味です。
よくある使い道
1. フィールドと引数の名前が同じとき
public class Person {
String name;
public Person(String name) {
this.name = name; // フィールドのnameに引数のnameを代入
}
}
この場合、this.name
はクラス内の変数を指し、name
はメソッド引数を指します。
名前が同じだと混乱するので、「this」をつけて区別しています。
2. 自分自身を返す(メソッドチェーン)
public class Counter {
int count = 0;
public Counter increment() {
this.count++;
return this;
}
}
こうしておくと、counter.increment().increment();
のように、メソッドチェーンが可能になります。
「super」とは?親クラス(スーパークラス)を指す
「super」の基本的な役割
「super」は親クラスのメンバやコンストラクタを参照するために使います。
Javaは「クラスの継承」という仕組みがあり、あるクラスが他のクラスの機能を引き継ぐことができます。このとき、引き継いだ元のクラス(親クラス)にアクセスしたいときに「super」を使います。
よくある使い道
1. 親クラスのコンストラクタを呼び出す
class Animal {
Animal(String name) {
System.out.println("Animal: " + name);
}
}
class Dog extends Animal {
Dog() {
super("ポチ"); // 親クラスのコンストラクタを呼ぶ
}
}
親クラスに引数付きコンストラクタがあるときは、子クラスのコンストラクタでsuper(...)
を呼び出す必要があります。
2. 親クラスのメソッドや変数を呼び出す
class Animal {
void speak() {
System.out.println("動物が鳴く");
}
}
class Dog extends Animal {
void speak() {
super.speak(); // 親クラスのspeak()を呼ぶ
System.out.println("ワンワン!");
}
}
このように、親クラスの機能を利用したうえで、自分なりの機能を追加することができます。
図で理解しよう!
クラス構造のイメージ
Animal(親クラス)
↑
superで参照
↑
Dog(子クラス)
Dogの内部には
this = 自分自身(Dog)
super = Animalの機能
「this」と「super」の違いまとめ
キーワード | 意味 | 参照先 | 主な用途 |
---|---|---|---|
this | 自分自身のインスタンス | 自分(現在のクラス) | フィールドの区別、メソッドチェーン |
super | 親クラスの機能やコンストラクタ | 親クラス | 継承された機能の利用 |
こんなとき、どっちを使う?
- 「自分のクラスの中で変数やメソッドを操作したい」→ this
- 「親クラスの処理を使いたい」→ super
今後の学習のヒント
次に学ぶべきは、「継承」や「オーバーライド(Override)」、「ポリモーフィズム(多態性)」といったオブジェクト指向の中核的な概念です!
また、実際に簡単なクラスを作って「this」と「super」を使ってみることで、理解が深まります。
たとえば「人間」クラスと「学生」クラスを作って、コンストラクタやメソッドを継承してみるのが良いトレーニングになりますよ!
セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク
投稿者プロフィール
