一个类的成员可以加上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?
}
}
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?
}
}
thinking in java第3版134页,有这样一句话:如果创建了一个新包,并自另一个包中继承类,那么唯一可以访问的成员就是源包的public成员!
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?
}
}
要这样用。
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×
可以被同一包中的所有类访问
可以被所有子类访问 nFeathers has protected access in birdpack.Bird子类中用父类对象不能访问父类中的protected变量
子类中用另外一个子类的对象也不能访问父类中的protected变量
好经典!