IT/JAVA

자바 this, this(), super, super()

바다, 2018. 1. 2. 16:44
반응형

this, this(), super, super()


우선 this와 this()에 대해 알아보겠습니다.


this

- 현재 클래스의 인스턴스, 인스턴스의 특정 필드를 지정할때 사용합니다.

 
 자기 자신을 의미하는 참조변수로,

 매개변수와 객체 자신이 가지고 있는 변수의 이름이 같은 경우 이를 구분하기 위해 사용합니다.


Class Test {
int a;

public void setA(int a) {
this.a = a;
}
}

Test test = new Test();

test.setA(10);


과 같이 setA() 메서드를 호출하게되면,

setA(int a) 로 전달된 int의 파라미터 a와 Test 클래스의 필드 값a 가 같은 이름입니다.

이럴 때 this를 붙여주면,

"이 a는 현재 메서드 setA(int a)의 파라미터인 a 가 아닌, 클래스 필드의 a 이다." 라는 것을 나타냅니다.




this() 
- 생성자를 부르기 위해 사용합니다.

 다양한 방법으로 인스턴스를 생성할 수 있도록 여러 종류의 생성자를 준비 했을때, this() 가 유용하게 사용할 수 있습니다.

 객체 생성자에서 사용 시 다른 생성자를 호출합니다. (this()는 맨 윗줄에 적어야 합니다.)


Class Person {
int age;
String name;

public Person() {
this(0, null);
}

public Person(int age) {
this(age, null);
}

public Person(int age, String name) {
this(age, name);
}
}





다음은 supersuper()에 대해 알아보겠습니다.

super
- 상위(부모) 클래스의 멤버 변수나 메서드를 사용하기 위한 변수 호출을 말합니다.

super 는 '부모 클래스에 있는 필드나 메서드를 사용하라' 라는 의미로 붙여주는 예약어입니다.

super로 멤버 변수나 메서드를 호출하기 위해서는 해당 변수나 메서드의 접근 제어자는 반드시 protected 혹은 public 이여야 합니다.

super.변수명
=> 상위 클래스의 멤버 변수를 호출합니다.

super.메서드명()
=> 상위 클래스의 메서드를 호출합니다.


class Person() {
public void info() {

}
}

class Student extends Person {
public void profile() {
info();        // 재정의한 info()가 우선 순위가 됩니다.

super.info();    // super를 사용했기 때문에 상위 클래스에 있는 info() 가 호출됩니다.
}

public void info() {

}
}



super() / super(매개변수)  
- 상위(부모) 클래스의 생성자를 호출합니다.

현재 자식 클래스가 자신을 생성할 때 부모 클래스의 생성자를 불러서 초기화 해주고 나서 자신을 초기화합니다.
(반드시 맨 윗줄에 적어야 합니다.)


반응형