개발/자바

protected 접근 제어자 다른 패키지 상속 방법

피터JK 2025. 2. 18. 10:36
728x90

protected 접근 제어자는 다른 패키지에서도 상속받은 경우에는 접근 가능 합니다.
즉, 다른 패키지에 있는 클래스라도 extends를 통해 상속받으면 protected 멤버를 사용할 수 있습니다.


1. 다른 패키지에서 상속하여 protected 멤버 접근하는 방법

📌 예제: 다른 패키지에서 protected 멤버 접근하기

(1) 부모 클래스 정의 (parent 패키지)

package parent;

public class Parent {
    protected void protectedMethod() {
        System.out.println("Protected method in Parent class");
    }
}
  • protectedMethod()는 protected이므로 같은 패키지에서는 자유롭게 접근 가능하지만,
    다른 패키지에서는 상속을 통해서만 접근할 수 있음.

(2) 자식 클래스에서 상속 (child 패키지)

package child;
import parent.Parent;

public class Child extends Parent {
    public void callProtectedMethod() {
        protectedMethod(); // ✅ 상속받았으므로 호출 가능
    }

    public static void main(String[] args) {
        Child child = new Child();
        child.callProtectedMethod(); // "Protected method in Parent class" 출력
    }
}
  • Child 클래스는 Parent 클래스를 extends 하여 상속받았음.
  • 따라서 protectedMethod()를 호출할 수 있음.

(3) 같은 패키지가 아닌 다른 클래스에서 접근 시도 (child 패키지)

package child;
import parent.Parent;

public class Test {
    public static void main(String[] args) {
        Parent parent = new Parent();
        // parent.protectedMethod(); // ❌ 컴파일 에러 (직접 접근 불가능)
    }
}
  • Parent 클래스를 직접 생성하여 호출하면 컴파일 오류 발생
    (protected 멤버는 상속을 통해서만 접근 가능하므로 직접 접근 불가)

2. super 키워드를 사용하여 protected 멤버 호출하기

super 키워드를 사용하면 부모 클래스의 protected 메소드에 접근할 수 있습니다.

package child;
import parent.Parent;

public class Child extends Parent {
    public void callProtected() {
        super.protectedMethod(); // ✅ 상속받았으므로 `super`를 통해 접근 가능
    }

    public static void main(String[] args) {
        Child child = new Child();
        child.callProtected(); // "Protected method in Parent class" 출력
    }
}

🔹 정리

접근 방법 같은 패키지 다른 패키지 (상속X) 다른 패키지 (상속O)
직접 호출 (parent.protectedMethod()) ✅ 가능 ❌ 불가능 ❌ 불가능
상속 후 호출 (child.protectedMethod()) ✅ 가능 ❌ 불가능 ✅ 가능

💡 결론:

  • protected 멤버는 같은 패키지 내에서는 자유롭게 접근 가능
  • 다른 패키지에서는 반드시 extends를 사용하여 상속해야 접근 가능
  • super 키워드를 사용하여 부모 클래스의 protected 멤버 호출 가능

이제 protected 접근 제어자를 활용하여 객체지향적인 코드를 작성할 수 있습니다! 

 

2025.02.18 - [개발/자바] - 메소드 접근 제어자 public, protected, private, default

 

 

728x90