父类:
package Inherit;public class Supper {
protected int pro;

protected void f1() {
System.out.println("protected f1 in Supper!");
}
}子类1:
package sub;import Inherit.Supper;
public class Sub extends Supper {
public static void main(String[] args) {
Supper sup = new Supper();
Sub sub = new Sub();
                  sub.pro = 2;
                  sub.f1();  //这里没有问题!
     }

子类2:
package sub;import Inherit.Supper;
public class Sub2 extends Supper {
public static void main(String[] args) {
Supper sup = new Supper();
Sub sub = new Sub();
                  sub.f1(); //error!
                  sub.pro = 2;  //error1!
}
}
为什么在sub2中生成的sub对象无法调用f1()方法呢?f1()方法在sub中是什么权限的?

解决方案 »

  1.   

    在sub2中如果生成sub2的对象肯定可以调用,而你生成的是sub的对象,现在已经相当于外部类访问sub对象的protected成员了。如果Sub和Sub2在同一个包内,那么就可以访问Sub对象的protected成员了。
      

  2.   

    是啊,sub1和sub2都在package sub中的啊!
      

  3.   

    在sub2中访问sub.f1(), 而f1()以是protect,是不行的。
    访问外部类,只能访问public接口。
    要访问自身类,可以访问protect接口。
      

  4.   

    切忌浮躁你就把protected的用法当成一种规则,改了肯定会出错的,因为这是规则。不要再考虑是否牵扯到面向对象概念或其他深层的东西了。
    1。不同包的子类
    2。同包其他类
      

  5.   

    protected 访问级别在包内可随便访问
              包外只有子类可以访问