생성자 super()
- 조상의 생성자를 호출할 때 사용 (this()와 비슷)
- 조상의 멤버는 조상의 생성자를 호출해서 초기화해야 한다.
- 자손의 생성자가 조상 멤버를 초기화하면 안 된다.
- 에러는 아니지만 자손 생성자는 자기가 선언한 것만 초기화해야 한다.
- 생성자의 첫 줄에 반드시 super() 또는 this()를 호출해야 한다. 호출하지 않으면 컴파일러가 생성자의 첫 줄에 super()를 삽입한다.
- 잘못된 방법으로 생성자를 선언한 예시
- 올바른 방법으로 고치려면 super(x, y); this.z = z; 로 바꿔서 조상의 생성자 Point3D(int x, int y)를 호출하도록 한다. 또, 기본 생성자도 만들어두는 것이 좋다.
- 올바른 방법으로 고치려면 super(x, y); this.z = z; 로 바꿔서 조상의 생성자 Point3D(int x, int y)를 호출하도록 한다. 또, 기본 생성자도 만들어두는 것이 좋다.
참조 변수 super
- 객체 자신을 가리키는 참조 변수
- 인스턴스 메서드(생성자 포함)에서 사용할 수 있다.
- 조상의 멤버를 자신의 멤버와 구별할 때 사용한다.
- this는 인스턴스 변수와 지역 변수 구별할 때 사용
class Ex {
public static void main(String[] args) {
Child c = new Child();
c.method();
}
}
class Parent {
int x = 10; // super.x
}
class Child extends Parent {
int x = 20; // this.x
void method() {
System.out.println("x = " + x); // 가까운 쪽에 있는 x 값 -> this.x
System.out.println("this.x = " + this.x);
System.out.println("super.x = " + super.x);
}
}
/* 결과
x = 20
this.x = 20
super.x = 10
*/
'☕ JAVA' 카테고리의 다른 글
[Java] 다형성(polymorphism) (0) | 2024.05.27 |
---|---|
[Java] 접근 제어자(access modifier) (0) | 2024.05.26 |
[Java] 클래스 간의 관계(상속 관계, 포함 관계) (0) | 2024.05.24 |
[Java] 변수의 초기화(지역 변수, 멤버 변수) (0) | 2024.05.23 |
[Java] 생성자 this()와 참조 변수 this (0) | 2024.05.22 |