public class Book {
private String title;
private int price;
public Book(String title) {
this(title, 0); // もう一つのコンストラクタを呼び出す
}
public Book(String title, int price) {
this.title = title;
this.price = price;
}
}
public class Person {
private String name;
private int age;
public Person setName(String name) {
this.name = name;
return this;
}
public Person setAge(int age) {
this.age = age;
return this;
}
}
// メソッドチェーンの利用例
Person p = new Person().setName("佐藤").setAge(25);
public class Printer {
public void print(Person person) {
System.out.println(person);
}
}
public class Person {
public void show(Printer printer) {
printer.print(this); // このインスタンス自身を渡す
}
}
public class Parent {
public void greet() {
System.out.println("親クラスのメソッド");
}
}
public class Child extends Parent {
public void greet() {
System.out.println("子クラスのメソッド");
super.greet(); // 親クラスのメソッドを呼び出す
}
}
public class Notifier {
public void notifyUser(User user) {
System.out.println(user.getName() + "さんに通知しました。");
}
}
public class User {
private String name;
public User(String name) { this.name = name; }
public String getName() { return this.name; }
public void sendNotification(Notifier notifier) {
notifier.notifyUser(this); // 現在のインスタンスを渡す
}
}
// 利用例
Notifier notifier = new Notifier();
User user = new User("佐藤");
user.sendNotification(notifier);
A.
必ずしも「this」を毎回書く必要はありません。
主にローカル変数(引数)とメンバ変数の名前が重複している場合や、現在のインスタンス自身を明示的に示したい場合に使います。
名前が被っていなければ、省略しても問題ありません。
Q2. staticメソッド内でthisを使うとどうなりますか?
A.
staticメソッドやstatic変数の中では、「this」を使うことはできません。
staticは「クラスそのもの」に紐づくものであり、インスタンス(オブジェクト)の概念が存在しないためです。
もし使おうとすると、コンパイルエラーになります。
Q3. thisとsuperの違いは何ですか?
A.
this … 現在のインスタンス(自分自身)を指します。
super … 親クラス(スーパークラス)のメンバやメソッドを参照するためのキーワードです。
継承関係がある場合に、親クラスの機能を明示的に呼び出したいときに「super」を使います。
役割と参照先が異なるので、使い分けに注意しましょう。
Q4. メソッドチェーンでthisを返す利点は?
A.
メソッドの戻り値として「this」を返すことで、複数のメソッドを連続して呼び出せる(メソッドチェーン)ようになります。
これにより、コードが短く・直感的になり、設定系のクラスやビルダーパターンで特に有効です。
Q5. thisを使わないと、どんな問題が起こりますか?
A.
引数やローカル変数とメンバ変数の名前が同じ場合、「this」を付けないとローカル変数が優先されてしまい、メンバ変数への代入や参照が正しくできません。
バグや意図しない挙動の原因となるため、必要な場面では必ず「this」を使いましょう。 これらのFAQを参考に、「this」に関するよくある疑問を事前に解消しておきましょう。