日期:2014-05-20  浏览次数:20720 次

问一个关于protected修饰符的问题。
我学习了protected修饰符,父类中protected成员变量和方法可以被子类在包外访问,但是下面这种情况是不是属于包外的子类呢:Base类为父类,在base包中;Sub类继承Base,在sub包中,没有问题;Sub类下面还定义了一个Suub类,也继承Base,但是不能调用Base的方法,代码如下
Base.java:
package demo;
import sub.Sub;
public class Base{
protected void ss(){
System.out.println("ss");
}
}
Sub.java:
package sub;
import demo.Base;

public class Sub extends Base{
public static void main(String[] args){
Sub s1 = new Sub();
s1.ss(); //Sub可以调用分类的方法
Suub s2=new Suub();
// s2.ss(); //Suub不能调用父类的方法
}
}
class Suub extends Base{

}

应该怎么解释呢?谢谢了

PS:晚上可能才能回来回复

------解决方案--------------------
包外的子类可以访问,是指包外的子类自己的方法中可以访问
Suub s2=new Suub();
s2.ss(); //这个调用不是在Suub类的方法中,是在Sub类的方法中,所以不能直接调用

LZ再好好体会一下这其中的区别
Java code
class Suub extends Base{
    public void xx() {
        ss(); //这个是在Suub自己的方法中,所以可以调用,包外的子类可以访问指的是这个意思
    }
}