나는 다음과 같은 코드를 가지고 : 나는 met2()
를 호출 할 때클래스
package pack1;
public class Father {
public String met1(){
return "c ";
}
protected String met2(){
return "b "+met1();
}
}
package pack2;
import pack1.Father;
class Child extends Father {
public String met1(){
return "a ";
}
}
class GrandChild extends Child {
public String met2(){
return super.met2() + "z" ;
}
public static void main(String[] args){
Father f = new GrandChild();
System.out.println(f.met2()); // Compile error here
}
}
, 그것은 super.met2()
호출 GrandChild
에서 구현 된 버전을 실행, 그래서 그것은 즉 (아이에 구현 된 버전을 실행을 아이가 met2()
을 구현하지 않기 때문에 아버지의 버전). 하지만 컴파일러는 "met2()
이 보이지 않습니다"라고 말하면서, met2()
이 "보호"되어있을 때 GrandChild (간접적으로 아버지의 하위 클래스)에서 호출하면 어떻게됩니까? met2()
을 인식해야합니다. 왜냐하면 서브 클래스와 그 보호 된 서브 클래 싱에서 호출하기 때문입니다 !!
감사합니다.
당신은이 사람에 대한 액세스 지정자에 대해 이야기하고 있습니까?>'String met2()'? –
위 코드는 "met2() is not visible"오류를 생성하지 않습니다. –
GrandChild의 m2()가 기본값 이었으므로 코드 조각 –