Javaのthisとsuperの違いとサンプルです。
目次
サンプル | thisとsuperの違い |
セッターでthis.変数名を使用 | |
super.メソッドで親クラスのメソッドを実行 | |
コンストラクタのthis | |
コンストラクタのsuper |
thisとsuperの違い
キーワード | 意味 |
---|---|
this | 自分のクラスのインスタンスを指します。 |
super | 親クラスのインスタンスを指します。 |
- this.変数名は、セッターで多く使われています。
- super.メソッドで親クラスのメソッドを実行できます。
- this,superは、コンストラクタでも使用されます。
セッターでthis.変数名を使用
gertter(ゲッター)とsetter(セッター)は、クラスのフィールドにアクセスするメソッドです。
外部からクラスのフィールドを直接編集できないようにするための仕組みです。
package test1;
class Employee {
int id;
String name;
public int getId() {
return id;
}
public String getName() {
return name;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
}
public class Test1 {
public static void main(String[] args) {
Employee emp = new Employee();
emp.setId(1);
emp.setName("suzuki");
System.out.println(emp.getId()); // 1
System.out.println(emp.getName()); // suzuki
}
}
13,16行目は、thisを使用しています。
この場合、3,4行目の変数に値がセットされます。
仮にthisがなかった場合、idとnameはローカル変数となり、
3,4行目に値はセットされません。
ローカル変数のidとnameには渡された値はセットされます。
super.メソッドで親クラスのメソッドを実行
package test1;
class Employee {
String getName() {
return "suzuki";
}
}
class Employee2 extends Employee{
String getName2() {
return(super.getName());
}
}
public class Test1 {
public static void main(String[] args) {
Employee2 emp2 = new Employee2();
System.out.println(emp2.getName2()); // suzuki
}
}
7行目のクラスは、2行目のクラスを継承しています。
9行目はsuperで親クラスの3行目のメソッドを実行します。
15行目の結果は、親クラスで実行された値が出力されます。
コンストラクタのthis
package test1;
class Color {
String name;
public Color(String name) {
this.name = name;
}
public Color(int num) {
// System.out.println("test");
this("red");
}
}
public class Test1 {
public static void main(String[] args) {
Color c1 = new Color(100);
System.out.println(c1.name); // red
}
}
5,8行目は、オーバーロードです。コンストラクタ名が同じで引数が異なるものです。
10行目のthisは、String型の引数が1つなので一致する5行目のコンストラクタを指します。
コンストラクタのthisは、コンストラクタ内で最初に記述します。
9行目のコメントを外すとthisが最初の記述にならないのでコンパイルエラーになります。
コンストラクタのsuper
package test1;
class Employee {
String name;
public Employee(String name) {
this.name = name;
}
}
class Employee2 extends Employee {
public Employee2(String name) {
super(name);
}
}
public class Test1 {
public static void main(String[] args) {
Employee2 emp2 = new Employee2("suzuki");
System.out.println(emp2.name); // suzuki
}
}
10行目は、コンストラクタです。
11行目のsuperは、親クラスの5行目のコンストラクタを実行します。
関連の記事