T.I.L #13 super

개발자지망생·2023년 10월 24일
0

super란?

1. 부모 클래스의 생성자 호출

super를 사용하여 부모 클래스의 생성자를 호출할 수 있다. 이것은 하위 클래스에서 생성자를 정의할 때 부모 클래스의 생성자를 명시적으로 호출할 때 사용된다. 부모 클래스의 생성자 호출은 하위 클래스의 생성자에서 첫 번째 문장으로 나와야 한다.

class 부모 {
    부모() {
        System.out.println("부모 클래스의 생성자");
    }
}

class 자식 extends 부모 {
    자식() {
        super(); // 부모 클래스의 생성자를 호출
        System.out.println("자식 클래스의 생성자");
    }
}

2. 부모 클래스의 멤버(필드 또는 메소드)에 접근

super를 사용하여 부모 클래스의 멤버에 접근할 수 있다. 이것은 부모 클래스와 하위 클래스에 동일한 이름의 필드 또는 메소드가 있는 경우에 유용하다.

class 부모 {
    int 값 = 10;

    void 메소드() {
        System.out.println("부모 클래스의 메소드");
    }
}

class 자식 extends 부모 {
    int 값 = 20;

    void 메소드() {
        super.메소드(); // 부모 클래스의 메소드 호출
        System.out.println("자식 클래스의 메소드");
    }

    void 다른메소드() {
        System.out.println(super.값); // 부모 클래스의 값에 접근
        System.out.println(값); // 자식 클래스의 값에 접근
    }
}

super 추가 설명

1. super()와 this()의 차이

부모 클래스의 생성자를 호출하는 데 사용되고, this()는 같은 클래스의 다른 생성자를 호출하는 데 사용된다. super와 this 모두 생성자에서만 사용할 수 있고, 생성자 내에서 호출하는 명령은 반드시 첫 번째 문장이어야 한다. 이를통해 생성자 오버로딩 및 코드 재사용에 도움이 된다.

class 클래스 {
    int 값;

    클래스() {
        this(5); // 같은 클래스의 다른 생성자 호출
    }

    클래스(int 값) {
        this.값 = 값;
    }
}

2. super와 메소드 오버라이딩

메소드 오버라이딩 시 super를 사용하여 부모 클래스의 메소드를 호출할 수 있다. 이것은 부모 클래스의 메소드를 확장하거나 변경할 때 유용하다.

class 부모 {
    void 메소드() {
        System.out.println("부모 클래스의 메소드");
    }
}

class 자식 extends 부모 {
    @Override
    void 메소드() {
        super.메소드(); // 부모 클래스의 메소드 호출
        System.out.println("자식 클래스의 추가 동작");
    }
}

3. super와 변수 접근

super를 사용하여 부모 클래스의 필드 또는 메소드에 접근할 때, 해당 멤버가 private로 선언되지 않는 한, super를 통해 접근이 가능하다. super는 부모 클래스의 인스턴스를 참조하는 것이 아니라, 부모 클래스의 멤버에 직접 접근할 수 있는 키워드이다.

참고한 것 : 자바의 정석 , 구글 서칭

0개의 댓글