Java中访问权限修饰符(转自JavaEye)

Java中访问权限修饰符public protected 缺省默认 private的用法总结 

1、访问权限符: 

(1)public: 

对于成员来说:任何其他类都可以访问它们,不管在同一个包中还是在另外的包中。 

对于类来说:  也是一样。 

(2)friendly: 

对于成员说:如果一个类的成员没有任何权限修饰,那么它门就是缺省包访问权限,用friendly来表示,注意friendly不是Java中的关键字,这里是个人喜欢的方式用它表示而已。同一个包内其它类可以访问,但包外就不可以。对于同一个文件夹下的、没有用packageclassesJava会自动将这些classes初见为隶属于该目录的default package,可以相互调用class中的friendly成员。

如以下两个class分别在同一个文件夹的两个文件中,虽然没有引入package,但隶属于相同的default package。 

   class Sundae{ 

   //以下两个方法缺省为friendly 

   Sundae()

     {} 

   Void f() 

 {

System.out.println(“Sundae.f()”); 

   

   public class IceCream

 

   public static void main(String[] args)

   Sundae x = new Sundae(); 

   x.f(); 

   

   

对于类来说:同一个包中的类可以用。总之,类只可以声明为public或者friendly。 

(3)private: 

对于对于成员来说:只能在该成员隶属于的类中访问。 

class Sundae{ 

   private Sundae(){}//只能在Sundae class中被调用 

   Sundae(int i) {} 

   static Sundae makASundae() { 

   return new Sundae(); 

   

   

   public class IceCream{ 

   public static void main(String[] args){ 

   // Sundae class中构造函数Sundae()private, 

   // 所以不能用它进行初始化 

   //Sundae x = new Sundae(); 

   Sundae y = new Sundae(1);//Sundae(int)friendly,可以在此调用 

   Sundae z = Sundae.makASundae(); 

   

   

对于类来说:类不可以声明为private。 

(4)protected: 

对于对于成员来说:相同包中的类可以访问(包访问权限);基类通过protected把基类中的成员的访问权限赋予派生类不是所有类(派生类访问权限)。 

例子:package c05.local; 

import pack1.Cookie; 

//注意:在这里ChocolateChip继承了类Cookie,按道理bite()方法也在 

//ChocolateChip中,可以用x.bite直接调用,但是不可以的,因为类ChocolateChip 

//Cookie类不在一个包中,各自具有包访问权限,为了能够使用x.bite()必须要把 

//Cookie方法的访问权限换成public或者protected,但是一旦换成public所有的人就 

//可以访问了,这样达不到隐私的要求,所以设置成protected最好,既可以顺利访问,也可以 

//避免外面的类调用,保护好隐私的作用 

public class ChocolateChip extends Cookie { 

  

    public ChocolateChip() { 

     System.out.println("ChocolateChip constructor"); 

    } 

    public static void main(String[] args) { 

      ChocolateChip x = new ChocolateChip(); 

      x.bite(); // Can't access bite 

    

    } 

} ///:~ 

package pack1; 

public class Cookie { 

public Cookie() 

System.out.println("Cookie constructor"); 

protected void bite(){System.out.println("bite");} 

对于类来说:类不可以声明为protected 

对于类的权限修饰,下面有更好的解释: 

Class类的访问权限: 

public:可以供所有的类访问。 

默认:默认可以称为friendly但是,java语言中是没有friendly这个修饰符的,这样称呼应该是来源于c++。默认的访问权限是包级访问权限。 

即如果写了一个类没有写访问权限修饰符,那么就是默认的访问权限,同一个包下的类都可以访问到,即使可以实例化该类(当然如果这个类不具有实例化的能力除外,比如该类没有提供public的构造函数)。 

说明: 

     1、每个编译单元(类文件)都仅能有一个public class 

     2public class的名称(包含大小写)必须和其类文件同名。 

     3、一个类文件(*.java)中可以不存在public class。这种形式的存在的场景:如果我们在某个包内撰写一个class,仅仅是为了配合同包内的其他类工作,而且我们不想再为了撰写说明文档给客户(不一定是现实意义的客户,可能是调用这个类的类)看而伤脑筋,而且有可能过一段时间之后有可能会彻底改变原有的做法,并完全舍弃旧版本,以全新的版本代替。 

     4class不可以是privateprotected。 

     5、如果不希望那个任何产生某个class的对象,可以将该类得所有构造函数设置成private。但是即使这样也可以生成该类的对象,就是classstatic的成员(属性和方法)可以办到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值