Java thisとsuperの違いとサンプル

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行目のコンストラクタを実行します。

関連の記事

Java入門 クラスの仕組みとサンプル
Java コンストラクタのサンプル

△上に戻る