Chapter6_访问权限控制_访问权限修饰词

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Chapter6_访问权限控制_访问权限修饰词相关的知识,希望对你有一定的参考价值。

 Java中有四种访问权限,public,private,protected和包访问权限,它们是置于类中每一个成员之前的定义,无论是一个域还是一个方法,下面一一介绍。

 一、包访问权限

  如果不提供任何访问权限修饰词,这意味着是包访问权限。即当前包中的所有其他类对那个包访问权限的成员都有访问权限,但对于这个包之外的所有类,这个类是private的,所以处于一个编译单元中的所有类之间,都是可以互相访问的。包访问权限允许将包内所有的类组合起来,以便于它们之间可以轻松地相互访问。总的来说,取得对某成员的访问去你的途径有:

  (1)将该成员设为public。

  (2)通过赋予包访问权的方式,将这几个类放在同一个包下。

  (3)使用继承来访问父类的public和protected成员。

  (4)提供访问器(accessor)和变异器(mutator)方法,也称get/set方法。

 

二、public:接口访问权限

  使用public关键字,就意味着public之后紧跟着的成员声明自己对每个人都是可用的。下面是一个例子:

 1 package dessert;
 2 
 3 public class cookie {
 4     public cookie(){
 5         System.out.println("cookie constructor");
 6     }
 7     void bite(){
 8         
 9     }
10 }

  如果再创建一个使用这个类的程序:

 1 package eat;
 2 
 3 import dessert.cookie;
 4 
 5 public class dinner {
 6     public static void main(String[] args){
 7         cookie c = new cookie();
 8         //c.bite();
 9     }
10 }

  就会发现,可以创建出cookie对象,但是不能访问到它的bite()方法,因为bite()只提供了包访问权限,在包之外是禁止访问的。

 

三、private:无法访问

  关键词private的意思是,除了包含该成员的类外,其他的类都无法访问这个成员,处于同一个包内的其他类也是不能访问private成员的。下面是一个使用private的实例:

 1 package sundae;
 2 
 3 class sundae{
 4     private sundae(){}
 5     static sundae makeSundae(){
 6         return new sundae();
 7     }
 8 }
 9 
10 public class icecream {
11     public static void main(String[] args){
12         //sundae s = new sundae();
13         sundae s = sundae.makeSundae();
14     }
15 }

  这个例子告诉了我们一个private的使用场景,即阻止别人直接访问某个类的构造器来创建这个类的对象。

 

四、protected:继承访问权限

  关键字protected处理的是使用继承的概念,protected不仅提供包访问权限,还有其他一些有趣的特性,下面是一个例子:

 1 package access;
 2 
 3 public class cookie {
 4     public cookie(){
 5         System.out.println("cookie constructor");
 6     }
 7     void bite(){
 8         System.out.println("bite");
 9     }
10 }
 1 package chocolate;
 2 
 3 import access.cookie;
 4 
 5 public class chocolatechip extends cookie{
 6     public chocolatechip(){
 7         System.out.println("chocolatechip constructor");
 8     }
 9     public void chomp(){
10         //bite();
11     }
12     public static void main(String[] args){
13         chocolatechip x = new chocolatechip();
14         x.chomp();
15     }
16 }

  在这个例子中,类cookie中有方法bite(),这说明在从cookie继承来的类中也有方法bite(),但是bite()只是包访问权限,所以在chocolate中也无法访问到这个方法。但是如果将cookie类改成这样:

 1 package access;
 2 
 3 public class cookie {
 4     public cookie(){
 5         System.out.println("cookie constructor");
 6     }
 7     protected void bite(){
 8         System.out.println("bite");
 9     }
10 }

  protected关键字的作用就体现出来了,这个关键词的使用使得,对于继承而来的其他类,也能在其他包中使用只有包访问权限的父类的域。

以上是关于Chapter6_访问权限控制_访问权限修饰词的主要内容,如果未能解决你的问题,请参考以下文章

Thinking in java Chapter6 访问权限控制

Java编程思想学习 访问权限

ThinkingInJava 学习 之 0000005 访问权限控制

访问控制

访问权限

Java编程思想(访问权限控制)