super.super()은 자바에서 허용되지 않는다.

이규훈·2023년 6월 16일


User
package backend;




class A {
    int a = 0;
    A() {
        System.out.println(a);
    }
}

class B extends A{
    int a = 1;
    B() {
        System.out.println(a);
    }
}

class C extends B{
    int a = 2;
    C() {
        System.out.println(super.super.a);
    }
}

public class ex03 {
    public static void main(String[] args) {
        A a = new C();

    }
}

Java에서는 super.super.a같은 접근을 허용하지 않습니다. super 키워드는 바로 위의 부모 클래스를 참조하는데 사용되며, 이를 두번 이상 연결해서 조상 클래스를 참조하는 것은 허용되지 않는다.

대신 다음과 같은 방식으로 조상 클래스의 멤버를 참조할 수 있습니다:

  1. 조상 클래스의 멤버가 공개(public) 또는 보호(protected)되어 있고, 하위 클래스에서 오버라이드하지 않은 경우, 조상 클래스의 멤버에 직접 접근할 수 있습니다.

  2. 조상 클래스의 멤버가 private로 선언되어 있는 경우, 조상 클래스에서 제공하는 public 또는 protected 메서드를 통해 접근해야 합니다.

  3. 직접적인 접근이 허용되지 않는 경우, 조상 클래스에서 멤버에 접근할 수 있는 메서드를 제공하는 것이 좋습니다. 이 메서드는 공개(public) 또는 보호(protected) 접근 제한자를 사용해야 합니다.

클래스 C에서 클래스 A의 'a' 변수에 접근하려면, 간접적으로 접근하는 방법을 사용해야 합니다. 예를 들어, 클래스 A에서 'a' 변수를 반환하는 메서드를 만들고, 이 메서드를 클래스 C에서 호출하여 'a' 변수에 접근할 수 있습니다.

profile
개발취준생

0개의 댓글