Language/Java

this와 super

Hyeri.dev 2024. 1. 5. 10:35

this와 super

this와 super 키워드는 변수와 메서드에 관련이 있는 키워드이다.

  • this : 현재 클래스의 변수(또는 메서드)을 가져올 때 사용하는 키워드
  • super : 현재 클래스의 상위 클래스(상속 관계)의 변수(또는 메서드)을 가져올 때 사용하는 키워드
public class Child extends Parents {
	public String value;
    
    public Child (String value) {
    	this.value = value;     // 현재 클래스(Child)의 값
        super.value. = value;   // 상위 클래스(Parents)의 값
      }
}


public class Parents {
	public String value;
}

this()와 super()

this()와 super()는 생성자와 관련이 있는 키워드이다.

  • this() : 현재 클래스의 생성자를 사용할 때 사용하는 키워드
  • super() : 현재 클래스의 상위 클래스(상속 관계)의 생성자를 사용할 때 사용하는 키워드
public class Child extends Parents {
	public Child(int a) {
    	super();  // 상위 클래스(Parents)의 기본생성자 호출, 생략 가능
    }
}


public class Parents {
}

 

상위 클래스의 생성자가 기본 생성자만 있을 경우 super() 키워드를 생략할 수 있다.

(기본 생성자를 작성하지 않아도 자바 컴파일러가 자동적으로 기본 생성자를 생성해주는 것과 같은 이치)

 

public class Child extends Parents {
	public int a;
    
    public Child(int a) {
    	super(a);       // 상위 클래스의 생성자 호출, 기본생성자가 아니므로 생략 불가.
        this.a = a;	
    }
    
    public Child(int a) {
        this.a = a;	
        super(a);      // 컴파일 오류. 상위 클래스의 생성자를 우선 호출해야 함.
    }
}


public class Parents {
	public Parents(int a) {
    	// 기본 생성자 없음.
    }
}

 

기본 생성자가 아닌 생성자를 호출할 때에는 반드시 상위 클래스의 생성자를 호출해야 하며 해당 클래스의 값을 대입한 후에 호출은 불가하므로 우선적으로 상위 클래스의 생성자를 호출해야 한다.