//A.java
package pa;
public class A { public A() {
}
public void show1(){
System.out.println("A");
}
protected void show2(){
System.out.println("a");
}
}//B.java
package pb;
class C extends pa.A { C() {
}
public void show3(){
System.out.println("C");
}
protected void show4(){
System.out.println("c");
}
}public class B {
public static void main(String [] args){
C c=new C();
c.show2();//error
}
}
编译错误:show2() has protected access in pa.A
为什么show2()不能c被访问呢,c是A的子类啊!请各位好心人帮忙
package pa;
public class A { public A() {
}
public void show1(){
System.out.println("A");
}
protected void show2(){
System.out.println("a");
}
}//B.java
package pb;
class C extends pa.A { C() {
}
public void show3(){
System.out.println("C");
}
protected void show4(){
System.out.println("c");
}
}public class B {
public static void main(String [] args){
C c=new C();
c.show2();//error
}
}
编译错误:show2() has protected access in pa.A
为什么show2()不能c被访问呢,c是A的子类啊!请各位好心人帮忙
但在另外一个类B中,就不可以看见show2()了,因为这个类B不是A的不同包子孙类,也不在一个包中。我觉得这个它就是这么规定的。否则那保护不是失去意义了吗? A本来只想去自己的子类C公开一个方法,结果因为B跟自己的子类C在一个包中,就间接地可以访问A,那A设置的保护,意义就不大了。如果真想访问,可以在C中覆盖show2,并用super.show2实现,达到让其他类间接访问A的目的。