Java修饰符

Java中,有四种修饰符,分别为private,protected,public和默认。关于他们的区别,现解释如下:

1 private:

私有的,只能是类自身才能访问,如一个Java工程中,我们添加了一个包,包名为gibbon.java.test。在该包名下定义了一个类名为Test的类。具体代码所示。

package gibbon.java.test;

public Class Test{
      private int a;
      protected int b;
      public int c;
      int d;
      public static void main(String[] args){
           Test test = new Test();
           int tmp = test.a; //因为是在自身中调用的私有成员数据,所以这个语句是正确的
      }
}

但是,如果我们在gibbon.java.test目录下再添加一个类名为TestPrivate的类,然后调用Test的私有数据a.就会发现,是个错误的语句。

package gibbon.java.test;

public Class TestPrivate{
      public static void main(String[] args){
           Test test = new Test();
           int tmp = test.a; //因为是在另一个类中调用的私有成员数据,所以这个语句是错误的
      }
}

另外,我们在这里再添加一个gibbon.java.others的包,同样,和上面的TestPrivate类一样,gibbon.java.others下的类也不能调用Test的私有成员


2 protected:

成员是受保护的,只有如该类的派生类(即子类)或者同个包名下的类才能访问。如下例子,在gibbon.java.test下有个TestProtected的类,其程序如下:

package gibbon.java.test;

public Class TestProtected{
     public static void main(String[] args){
          Test test = new Test();
          int tmp = test.b //b是受保护成员数据,即使是非自身类调用,在同个包内的其他类也可以访问
     }
}
但是,若如1中所说的,在包gibbon.java.others下的某个类访问,则会出现非法访问,除非这个类是派生自所访问的类。如下例子:

package gibbon.java.others;
import gibbon.java.test;

public Class TestChild extends Test{
      public static void main(String[] args){
          Test test = new Test();
          int tmp = test.b;
      }
}
但是这个TestChild仍然无法访问父类的私有成员a。见1


3  默认:

成员属性是默认的,其和private的区别是比private的权限大点,即默认的能被同个包名下的类所访问,而private不行。但默认的又比protected属性的权限小些,其同样和protected能在同包名下被访问,但若是非同包的类则不能直接访问,即使是派生类也不行,如上面的TestChild派生类,若加如下句子,则编译报错。

package gibbon.java.others;
import gibbon.java.test;

public Class TestChild extends Test{
      public static void main(String[] args){
          Test test = new Test();

          int tmp1 = test.d; //非相同包内的派生类访问父类的默认成员是不允许的

          int tmp = test.b;     
 }
}


4 Public:

公有的,所有的类都能访问。这个是最容易理解的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值