this
- 생성자 this()
생성자에서 같은 클래스의 다른 생성자를 호출할 때 this(), this(매개변수)를 사용합니다.
한 생성자에서 다른 생성자를 호출 할 때는 반드시 첫 줄에서만 호출이 가능합니다.
왜냐하면 생성자 내에서 초기화 작업도중 다른 생성자를 호출하게 되면, 호출된 다른 생성자 내에서도 멤버변수들의 값을 초기화하기 때문에 호출하기 이전에 작업한 초기화가 무의미해지기 때문입니다.
- 인스턴스 변수 this
인스턴스 변수를 생성자 내에서 호출할 떄에는 this라는 참조변수를 활용하면 됩니다.
this는 멤버변수와 지역변수의 이름이 같을 때 구분하기 위해서 사용됩니다.
this에는 인스턴스의 주소가 저장되어 있으며 모든 인스턴스 메서드에 지역변수로 숨겨진 채로 존재합니다.
super
- 인스턴스 변수 super
super는 자식 클래스에서 부모 클래스로부터 상속받은 데이터를 참조하는데 사용되는 참조 변수입니다.
상속받은 멤버와 자신의 클래스에 정의된 멤버의 이름이 같을 때 super을 사용해 구분할 수 있습니다.
모든 인스턴스 메서드에는 자신이 속한 인스턴스의 주소가 지역변수로 저장되는데, 이것이 참조 변수인 this와 super입니다.
static 메서드는 인스턴스와 관련이 없기 때문에, this와 super을 사용할 수 없다.
class Parent {
int x = 10;
}
class Child extends Parent {
int x = 20;
void method() {
System.out.println("x = " + x);
System.out.println("this.x = " + this.x);
System.out.println("super.x = " + super.x);
}
}
class SuperTest2 {
public static void main(String args[]) {
Child c = new Child();
c.method();
}
}
//출력
x = 20
this.x = 20
super.x = 10
- 생성자 super()
부모 클래스의 생성자를 호출하는데 사용됩니다.
자식 클래스의 인스턴스를 생성하면, 자식의 멤버와 부모의 멤버가 모두 합쳐진 하나의 인스턴스가 생성됩니다.
따라서 자식 클래스의 인스턴스가 부모 클래스의 멤버들을 사용할 수 있습니다.
자식 생성자의 첫 줄에 부모 클래스의 생성자를 호출해야 하는데, 그 이유는 자식 클래스의 멤버가 부모 클래스의 멤버를 사용할 수 있기 때문에 부모 클래스의 멤버들이 먼저 초기화되어야 하기 때문입니다.
이러한 부모 클래스 생성자 호출은 클래스의 상속관계를 거슬러 올라가서 마지막으로 모든 클래스의 최고 조상인 Object 클래스의 생성자인 Object()까지 호출되고 끝이 납니다.
첫 줄에 부모 클래스의 생성자를 호출하지 않으면, 컴파일러가 생성자의 첫 줄에 super();를 자동적으로 추가합니다.
'Java' 카테고리의 다른 글
다형성 Polymorphism (0) | 2022.05.23 |
---|---|
제어자 Modifier (0) | 2022.05.20 |
상속 Inheritance (0) | 2022.05.20 |
오버로딩(Overloading)과 오버라이딩(Overriding) (0) | 2022.05.19 |
객체지향 프로그래밍(OOP, Object-Oriented Programming) (0) | 2022.05.19 |