this 와 마찬가지로 super 도 생성자와 참조변수 둘 다 존재합니다.
super 의 두 가지 용도를 알아보도록 합니다.
1. 생성자 super()
2. 참조변수 super
1. 생성자 super()
조상의 인스턴스 멤버들을 초기화하기 위해 사용됩니다.
public static void main(String[] args) throws IOException {
Child child = new Child(1, 2);
}
static class Parent {
int parentIv;
public Parent(int parentIv) {
this.parentIv = parentIv;
}
}
static class Child extends Parent{
int childIv;
public Child(int parentIv, int childIv) {
// this.parentIv = parentIv; 컴파일 에러!
super(parentIv);
this.childIv = childIv;
}
}
}
Object 클래스를 제외한 모든 클래스의 생성자 첫 줄에는 생성자 (같은 클래스의 다른 생성자 또는 조상의 생성자) 를 호출해야 합니다. 그렇지 않으면 컴파일러가 자동적으로 super(); 를 생성자의 첫 줄에 삽입합니다.
class Point {
int x;
int y;
Point(int x, int y) {
// super(); -> Object() 를 컴파일러가 자동적으로 넣어준다
this.x = x;
this.y = y;
}
}
class Point3D extends Point {
int z;
// 잘못된 코드!
Point3D(int x, int y, int z) {
// super() 가 자동적으로 넣어져서 Point() 호출
this.x = x;
this.y = y;
this.z = z;
}
}
Point3D 의 경우 컴파일러에서 super() 가 자동적으로 삽입되어 Point() 를 호출한다. 그러나 Point의 기본생성자가 없기 때문에 컴파일 에러가 난다. Point 기본 생성자를 만들어주면 해결된다.
public static void main(String[] args) throws IOException {
Child child = new Child(1, 2);
}
class Parent {
int parentIv;
public Parent() {}
public Parent(int parentIv) {
this.parentIv = parentIv;
}
}
class Child extends Parent{
int childIv;
public Child(int parentIv, int childIv) {
this.parentIv = parentIv;
// super(parentIv);
this.childIv = childIv;
}
}
}
2. 참조변수 super
참조변수 this와 마찬가지로 조상의 멤버와 자신의 멤버를 구별하는데 사용합니다.
class Parent {
int x = 10;
void methodParent() {
System.out.println("부모 메소드");
}
}
class Child extends Parent{
int x = 10;
void methodChild() {
System.out.println("x = " + x);
System.out.println("super.x = " + super.x);
super.methodParent();
}
}
Child 인스턴스를 생성하고 methodChild() 를 호출했을 때의 결과는 위와 같습니다. 즉 super 는 조상 자체를 가르키며 조상 객체의 메소드, 인스턴스 변수를 호출하는데 사용됩니다.
'📗Java' 카테고리의 다른 글
[Java] 예시와 함께 알아보는 추상화 - 추상클래스와 인터페이스 (0) | 2023.07.20 |
---|---|
[Java] Chained Exception (0) | 2023.07.20 |
[Java] default 메소드는 왜 생겼는가? (0) | 2023.07.19 |
[Java] 생성자 this() 와 참조변수 this (0) | 2023.07.13 |
[Java] JVM 메모리 관리 (2) | 2023.07.13 |