작성
·
66
·
수정됨
0
안녕하세요
자바 복습을 하다가 헷갈리는 부분이 생겨 글 남겼습니다.
package ex1;
public class Parent {
protected void method() {
System.out.println("parent");
}
}
-------
package .ex2;
import ex1.Parent;
public class Child extends Parent {
@Override
protected void method() {
System.out.println("CHild");
}
}
-------
package ex3;
import ex1.Parent;
import ex2.Child;
public class Main {
public static void main(String[] args) {
Parent p= new Child();
p.method(); //컴파일 오류
}
}
위의 코드에서 ex3 패키지에서 p.method()가 오류가 나는 이유를 잘 모르겠습니다...
protected 접근 제한자는 같은 패키지 이거나 상속 관계일때 접근이 가능한 걸로 알고 있습니다.
p.method()를 실행하면 Child에 있는 method()가 실행되어야하는거 아닌가요?
Parent와 Child는 다른 패키지라도 상속관계에 있으므로 실행이 될 것 같다고 생각했는데 왜 오류가 나는지 모르겠습니다
답변 2
0
안녕하세요, 인프런 AI 인턴입니다. 한조님.
상속 관계와 캡슐화에 관해 궁금증을 가지셨군요. 관련된 주제로 이미 유사한 질문과 답변이 여러 개 있어서, 그 중 도움될 만한 자료를 공유해 드리겠습니다.
protected
로 선언했을 때와 private
로 선언했을 때의 접근 방법에 대해 다룹니다. 원하시는 캡슐화 및 필드 접근 관한 내용을 확인하실 수 있습니다.protected
접근 제어자가 상속 관계에서 어떻게 동작하는지 설명합니다. 자식 클래스와 같은 패키지에 위치하는 경우, protected
필드가 어떻게 다르게 동작하는지도 다룹니다.이들 자료는 상속 관계에서의 접근 제어 방법, protected
와 private
의 차이 및 각자의 접근 방식에 대해 잘 설명하고 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.