본문 바로가기

JAVA

[JAVA] super와 super()

1. super

부모 클래스의 변수와 자식 클래스의 변수의 이름이 동일할 때 super 참조 변수를 사용하여 멤버를 구분할 수 있습니다

super를 사용하면 부모 클래스의 변수가 호출되며 this로 자식 클래스의 변수를 호출할 수 있습니다

부모클래스에만 선언된 b 변수는 this를 사용하더라도 부모 클래스의 변수를 호출합니다

//부모클래스
class Parent {
    int a = 10;
    int b = 20;
}

//자식클래스
class Child extends Parent {
    int a = 30;
    
    void print() {
        System.out.println(super.a); //super a 호출
        System.out.println(this.a); //this로 a 호출
        System.out.println(this.b); //this로 b 호출
    }
}
//출력결과
10
30
20

 

 

 

2. super()

super 참조변수는 이름이 동일한 부모 클래스의 변수를 호출했다면 super() 메소드는 부모 클래스의 생성자를 호출합니다

 

모든 자식 클래스의 생성자 첫 줄에 super()가 존재하기 때문에 자식 클래스의 생성자를 호출하면 자동으로 부모 생성자가 호출됩니다

부모 클래스의 생성자를 호출하면서 모든 클래스의 부모 클래스 격이 Object까지 거슬러 올라갑니다

//부모클래스
class Parent {
    int a = 10;
}

//자식클래스
class Child extends Parent {
    int b;
    Child() {
        //super() 자동호출
        b = 20;
    }
}

 

 

그러나 부모 클래스에 기본 생성자가 아닌 매개변수를 가지는 생성자가 있다면 디폴트 생성자는 호출되지 않습니다

이런 경우에 오버라이딩을 하며 super() 메소드를 사용하면 부모의 생성자를 호출할 수 있습니다

//부모클래스
class Parent {
    int a;
    Parent() { a = 10; }
    Parent(int n) { a = n; }
}

//자식클래스
class Child extends Parent {
    int b;
    Child() {
        super(40);
        b = 20;
    }
    void display() {
        System.out.println(a);
        System.out.println(b);
    }
}
//출력결과
40
20

'JAVA' 카테고리의 다른 글