Java访问权限修饰符
从访问权限的大小可以由大到小排列为public,protected,包访问权限,以private.
包访问权限,即默认访问权限,没有任何关键字,又是也表示friendly。在一个包中,如果一个对象前面没有任何权限修饰符的话,就默认为包权限修饰符。包默认权限的范围是包内的任意一个类中都可以使用这个对象,但是对于不包含这个对象的包来说这个对象就是private.是不允许访问的。例如下面的代码。
package friendly
public class Test
{
void cook(){}
}
在这段代码中cook方法没有任何权限修饰词,也就是该方法是包访问权限,从而使得只有friendly包中的对象在能够访问该方法,而包外的对象是不能访问该方法的,无论是包外的类继承了该类,也还是不能访问的。
包访问权限的意义在于当你把一个类放进该包中也就是说这个类和包中其他成员都是可以互相访问的
public 使用了public关键字表示该关键字修饰的对象对于任何人都是可以用的,这个无论是在包内还是在包外都可已访问,只要到时候导入某个包即可。
类的访问权限在一个类文件中,只能有 一个public类型的类。这表示每个编译单元都有单一的公共接口,用public来表现。该接口可以包含众多支持包访问权限的类。
public类型的类名必须与文件名相一致,同时类既不可以是private也不可以是protected的.
private类型是私有类型类,用该修饰符修饰的对象只能在定义该对象的类中使用,在类外就不可以使用了。主要用于实现不想被其他类访问的对象。它的用法主要在于多线程编程,也可以用来私有化类的构造器,避免不必要的构造。
下面是一个单例模式的构造:
public class Soup{
//私有化一个构造器,使得在其他类中不可以使用默认构造器进行创建实例。
private Soup(){};
//构造一个类的实例,
private static Soup soup=new Soup();//这一行首先通过默认构造器创建了一个对象;同时这个对象是静态的说明了这个无论创建多少个类的对象,该对象都只有一个;第三这个对象是私有的,只能在这个类中被调用。
//这个方法是该类中唯一的一个public方法,说明其他类访问该类的对象时只能通过该方法
//这个方法的返回值是Soup,这也就说明了这个方法返回一个Soup对象的引用,其他类想要创建Soup对象的话,只能通过这个类。
//这个方法返回的是上面的静态的Soup对象,这一点很重要,说明无论调用多少次这个方法,返回的都是一个对象,即上面创造的静态对象soup。
public Soup access(){
return soup;
}
}
上面的代码说明了Soup类只能创造一个对象,这就是单例模式的一种实现。
在该类中使用private修饰符修饰类构造器,是的其他类中不能创建该类的对象。
如果soup对象是public的话,其他类中也可以通过类名访问这个静态变量,但是同时无论如何也是一个对象。
protected修饰词。这个修饰词修饰的对象只能在包含该对像的类的子类中被访问到。下面有个例子:
package access.dessert
public class Cookie{
void bite();//这里说明了这个类是包访问权限。
}
import access.desseert
public class Chip extends Cookie{
public void chomp(){
!bite()//bite方法在此处是不可以用,因为这不是在同一个包中
}
}
将Cookie类修改一下则可以调用bite方法了。
package access.dessert
public class Cookie{
protected void bite(){}
}
下载就可已访问bite方法,这个可以发现,protected是不用管包的限制的,只要发生及关系就可以访问。