자바(JAVA) : this, this(), super, super()
this 키워드
클래스 생성에 흔히 많이 사용되는 키워드 중 하나로 '객체, 자기 자신'을 나타내는 명령어 입니다.
사용은 총 3가지 형태로 사용되며, 대부분 호출한 객체를 명확히 하기위해 사용된다.
* 클래스의 속성과 매개변수의 이름이 같을 때
public Class Test{
int a;
public void Test(int a){
this.a = a;
}
}
위 소스에서는 생성자에서 클래스 속성인 a를 매개변수 a로 초기화해주고 있다. 근데 만약 이를 a = a로 나타내면 어떻게 될까?
답은 '초기화되지 않는다' 입니다. 만약 이처럼 this를 사용하지 않을 경우, a는 스코프에 위해서 [매개변수a = 매개변수a] 라는 식을 가지게 되고 결과적으로 객체의 값 자체는 초기화 되지 않게 됩니다.
* 오버로딩된 다른 생성자를 호출할 때
이건 우리가 코딩하다 흔히 보는 this() 함수를 사용하는 경우입니다.
public Class Test{
int a;
int b;
public void Test(){
this(null,null);
}
public void Test(int a){
this(a, null);
}
public void Test(int b){
this(null, b);
}
public void Test(int a , int b){
this.a = a;
this.b = b;
}
}
this() 는 위와 같이 생성자를 부르기 위해 사용됩니다. 가장 많이 사용되는 것이 위와 같은 형태로 보통 속성을 초기화하는 부분을 축약할 때 사용되어 집니다.
주의할 점은 this()는 반드시 생성자의 첫번째 문장에 사용되어야 한다는 점입니다.
* 객체 자신의 참조값을 전달하고 싶을때
마지막으로 사용하는 방법이 자기자신의 참조값을 전달하고 싶은 경우입니다.
public Class Test{
int a;
public Test(int a){
this.a = a;
}
public Test getTest(){
return this;
}
}
위와 같이 자신의 참조값을 전달하고 싶을 때 this라는 키워드가 사용됩니다.
super 키워드
this를 공부하면 다음으로 나오는 키워드가 바로 super 키워드 입니다.
super의 경우 this와는 다르게 자식클래스가 부모클래스로부터 상속받은 멤버로를 사용하고자 할때 사용됩니다.
class Parent{
int a = 10;
}
class Child extends Parent{
int a = 20;
void childMethod(){
System.out.println(a); //20
System.out.println(this.a); //20
System.out.println(super.a); //10
}
}
[출처] 온라인 자바 스터디#5 - 클래스(클래스, 메소드, 생성자, this/super키워드)|작성자 슝스
위와 같이 super를 사용하면 부모클래스에 선언된 속성 값을 가져올 수 있습니다.
super 키워드와 this 키워드의 기능이 비슷하 듯이 this()와 super() 키워드 역시도 기능이 비슷합니다. super() 키워드는 this()와 마찬가지로 생성자를 호출하는 함수로, 자기자신이 아닌 부모클래스의 생성자를 호출합니다.
class Canvas2D{
int x;
int y;
public Canvas2D(int x, int y) {
this.x = x;
this.y = y;
}
}
class Canvas3D extends Canvas2D{
int z;
public Canvas3D() {
this(100, 200, 300);
}
public Canvas3D(int x, int y, int z) {
super(x, y);
this.z = z;
}
}
다음과 같이 불러와 해당 속성들을 모두 초기화 할 수 있습니다.