super

이규은·2021년 10월 1일
0

상속

목록 보기
2/6

super 키워드

super 키워드는 부모 클래스로부터 상속받은 필드나 메소드를 자식 클래스에서 참조할때 사용하는 참조 변수이다.
인스턴스 변수의 이름과 지역 변수의 이름이 같을 경우 this 키워드를 사용하여 구분하듯이 부모 클래스의 멤버와 자식 클래스의 멤버 이름이 같을 경우 super 키워드를 사용하여 구별할 수 있다.

class Parent {
    int a = 20;
}

class Child extends Parent {
    int a = 10;

    void print() {
        System.out.println("a = " + a);
        System.out.println("this.a = " + this.a);
        System.out.println("super.a = " + super.a);
    }
}

public class InheritanceStudy {
    public static void main(String[] args) {
        Child child = new Child();
        child.print();
    }
}

결과

this 참조 변수는 자식 클래스에서 대입된 값을 출력하고 super 참조 변수는 부모 클래스에서 대입된 값을 출력한다

super()

super() 메소드는 부모 클래스의 생성자를 호출할 때 사용된다.

자식 클래스의 인스턴스를 생성하면 자식 클래스의 고유 맴버와 부모 클래스의 맴버까지 포함되어 있다. 부모 클래스의 멤버를 초기화 하기 위해서 자식 클래스의 생성자에서 부모 클래스의 생성자 까지 호출해야 한다.
이런한 부모 클래스의 생성자 호출은 Object까지 계속 올라가며 수행한다.

super() 메소드 주석

class Parent {
    int a;

    Parent() {
        a = 10;
    }

    Parent(int n) {
        a = n;
    }
}

class Child extends Parent {
    int b;

    Child() {
        //super(50);
        b = 20;
    }

    void print() {
        System.out.println("a = " + a);
        System.out.println("b = " + b);
    }
}

public class InheritanceStudy {
    public static void main(String[] args) {
        Child child = new Child();
        child.print();
    }
}

결과

자바 컴파일러는 주석 처리된 라인에 자동으로 super() 를 삽입한다.
따라서 a는 10으로 초기화 된다.

super() 메소드 사용

class Parent {
    int a;

    Parent() {
        a = 10;
    }

    Parent(int n) {
        a = n;
    }
}

class Child extends Parent {
    int b;

    Child() {
        super(50);
        b = 20;
    }

    void print() {
        System.out.println("a = " + a);
        System.out.println("b = " + b);
    }
}

public class InheritanceStudy {
    public static void main(String[] args) {
        Child child = new Child();
        child.print();
    }
}

주석을 해제 하면 Parent는 두 번째 생성자에 의해 초기화 된다.
따라서 a는 50으로 초기화 된다

profile
안녕하세요

0개의 댓글