그것은 매우 어리석은 것처럼 보이지만 정말 혼란 스럽습니다. 코드는 아래를 참조하시기 바랍니다 :수퍼 클래스의 보호 된 메서드가 다른 패키지의 하위 클래스에 표시됩니까?
package com.one;
public class SuperClass {
protected void fun() {
System.out.println("base fun");
}
}
----
package com.two;
import com.one.SuperClass;
public class SubClass extends SuperClass{
public void foo() {
SuperClass s = new SuperClass();
s.fun(); // Error Msg: Change visibility of fun() to public
}
}
내가 오라클 문서뿐만 아니라 here에서 읽고, 보호 된 멤버가 다른 패키지도의 서브 클래스에서 볼 수 있습니다. 그래서 fun()는 패키지 2의 SubClass에 표시되어야합니다. 그런데 왜 오류가 있습니까?
내가 몹시 분명한 뭔가를 매우 분실하고 있습니까?
이 메소드는'SubClass' 인스턴스의 인스턴스에서 볼 수 있습니다. 그래서 this.fun()을 호출 할 수 있습니다. 그러나 다른 인스턴스를 생성하고 그 메소드를 호출하려고하면'SubClass'의 인스턴스가 ** SuperClass의 인스턴스 **와 아무런 관련이 없으므로 허용되지 않습니다. – Zabuza
"보이기"는 전체 그림을 제공하지 않습니다. 'this.fun()'또는 간단히'fun()'와 같은 메소드를 호출 할 수 있지만'SuperClass'의 새로운 인스턴스를 생성 할 때'SubClass'가 "일반 "SuperClass의 클라이언트는 또한 그것으로부터 상속 받음에도 불구하고. – dasblinkenlight
이제 누락 된 링크가 있습니다. :) 감사 – Dexter