第六章 访问权限控制
Java访问权限控制
Java有public、protect、friendly、private四种访问权限修饰词在使用时,是置于类中每个成员的定义之前的,无论是一个域还是一个方法。每个访问权限修饰词仅控制它所修饰的特定定义的访问权。并且这四访问权限的访问范围越来越小。
1、public:可以被任何class调用
2、protected:继承访问权限 即,既能被同一package中的classes访问,又能被protected成员所在class的subclass访问
实例如下:父类
public class AProtected {
public AProtected() {
System.out.println("AProtected");
}
protected void A() {
System.out.println("A()");
}
}子类
public class BPprotected extends AProtected {
public BPprotected() {
System.out.println("BPprotected");
}
public void chomp() {
System.out.println("chomp");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
BPprotected bPprotected = new BPprotected();
bPprotected.chomp();
bPprotected.A();
}
} 3、friendly
1) 如果一个class内的数据成员或方法没有任何权限饰词,那么它的缺省访问权限就是friendly。同一个package内的其它所有classes都可以访问friendly成员,但对package以外的classes则形同private。
2)对于同一个文件夹下的、没有用package的classes,Java会自动将这些classes初见为隶属于该目录的default package,可以相互调用class中的friendly成员。如以下两个class分别在同一个文件夹的两个文件中,虽然没有引入package,但隶属于相同的default package
4、private:private成员只能在成员所属的class内被调用
实例如下:
class Sundae{
private Sundae() {}
static Sundae makeAsundae(){
return new Sundae();
}
}
public class TestPrivate {
public static void main(String[] args) {
Sundae sundae = Sundae.makeAsundae();
Sundae sundae2 = new Sundae();//报错
//The constructor Sundae() is not visible
}
}