一个类的成员可以加上public,private,protected的修饰,如果没有加就默认为friendly,我看到thinking in java里说friendly只能在这个包装的范围内使用,protected 与 private 相似,只是一个继承的类也可以访问protected成员,但我实际测试下来发现如果不是同一个包的话,即使是继承的类也不能访问protected类型,不知道是什么原因,以下是我的测试代码。package test1;
public class Test1 {
    
    public String s1 = "public";
    protected String s2 = "protected";
    private String s3 = "private";
    String s4 = "default";}
package test2;
import test1.*;
public class Test22 extends Test1{
    
    public static void main(String[] args) {
        Test1 t1 = new Test1();
        System.out.println(t1.s1);
        //System.out.println(t1.s2);//此行代码出错,但是根据thinking in java的说法,应该是可以执行的,why?
    }
}

解决方案 »

  1.   

    ^_^,书要看仔细.
    thinking in java第3版134页,有这样一句话:如果创建了一个新包,并自另一个包中继承类,那么唯一可以访问的成员就是源包的public成员!
      

  2.   

    package test2;
    import test1.*;
    public class Test22 extends Test1{
        
        public static void main(String[] args) {
            Test22 t1 = new Test22();
            System.out.println(t1.s1);
            System.out.println(t1.s2);//此行代码出错,但是根据thinking in java的说法,应该是可以执行的,why?
        }
    }
    要这样用。
      

  3.   

    作用域 当前类 同一package 子孙类 其他package 
    public √ √ √ √ 
    protected √ √ √ × 
    friendly √ √ × × 
    private √ × × × 
      

  4.   

    protected
    可以被同一包中的所有类访问 
    可以被所有子类访问 nFeathers has protected access in birdpack.Bird子类中用父类对象不能访问父类中的protected变量
    子类中用另外一个子类的对象也不能访问父类中的protected变量
      

  5.   

    mofeir(损人专家) 
    好经典!