thisキーワード
CoddyのJavaジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 4/87。
thisキーワードは、クラスの現在のインスタンスを指します。これは、同じ名前を持つフィールドとパラメータを区別します。
this がないと、引数がフィールドを隠してしまいます(シャドウイング)。
public class Person {
private String name;
public Person(String name) {
name = name; // 引数自身に代入してしまいます!
}
}this を使用して値を正しく代入する
public class Person {
private String name;
public Person(String name) {
this.name = name; // パラメータをフィールドに代入する
}
public String getName() {
return this.name;
}
}メソッド内での this の使用
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getDescription() {
return this.name + " is " + this.age + " years old";
}
}thisキーワードは常に現在のオブジェクトを指します。パラメータ名がフィールド名と一致する場合に不可欠であり、混乱やバグを防ぎます。
チャレンジ
中級thisキーワードを使用して、フィールドとパラメータを区別するようにPersonクラスを完成させてください:
thisを使用してパラメータをフィールドに代入するコンストラクタthisを使用してフィールドにアクセスするゲッターメソッド"<name>, age <age>, from <city>"を返すgetDescription()メソッド
チートシート
thisキーワードは、クラスの現在のインスタンスを指し、同じ名前を持つフィールドとパラメータを区別します。
thisがない場合、パラメータがフィールドをシャドウイング(隠蔽)します:
public Person(String name) {
name = name; // パラメータを自分自身に代入しています!
}thisを使用して値を正しく代入する:
public Person(String name) {
this.name = name; // パラメータをフィールドに代入します
}ゲッターメソッドでthisを使用する:
public String getName() {
return this.name;
}複数のフィールドでthisを使用する:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getDescription() {
return this.name + " is " + this.age + " years old";
}
}自分で試してみよう
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
int age = Integer.parseInt(scanner.nextLine());
String city = scanner.nextLine();
Person person = new Person(name, age, city);
System.out.println("Name: " + person.getName());
System.out.println("Age: " + person.getAge());
System.out.println("City: " + person.getCity());
System.out.println(person.getDescription());
}
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
オブジェクト指向プログラミングのすべてのレッスン
4継承
継承の基本 (extends)super キーワードメソッドのオーバーライド (@Override)コンストラクタチェーンObject クラス単一継承と多段階継承なぜ多重継承ができないのかまとめ:従業員の階層構造