`
javacto
  • 浏览: 82043 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

访问控制符

阅读更多

 

         访问控制符的作用是说明被声明的内容(类、属性、方法和构造方法)的访问权限,就像发布的文件一样,在文件中标注机密,就是说明该文件可以被那些人阅读。

         访问控制在面向对象技术中处于很重要的地位,合理的使用访问控制符,可以通过降低类和类之间的耦合性(关联性)来降低整个项目的复杂度,也便于整个项目的开发和维护。具体的实现就是通过访问控制符将类中会被其它类调用的内容开放出来,而把不希望别人调用的内容隐藏起来,这样一个类开放的信息变得比较有限,从而降低了整个项目开放的信息,另外因为不被别人调用的功能被隐藏起来,在修改类内部隐藏的内容时,只要最终的功能没有改变,即使改变功能的实现方式,项目中其它的类不需要更改,这样可以提高了代码的可维护性,便于项目代码的修改。

         Java语言中访问控制权限有4种,使用三个关键字进行表达,依次如下:

<!--[if !supportLists]-->l  <!--[endif]-->public——公共的

<!--[if !supportLists]-->l  <!--[endif]-->protected——受保护的

<!--[if !supportLists]-->l  <!--[endif]-->无访问控制符——默认的

<!--[if !supportLists]-->l  <!--[endif]-->private——私有的

其中无访问控制符是指不书写任何的关键字,也代表一种访问权限,访问控制符的使用示例如下所示:

public class AccessControl {

                  int n;

                  public AccessControl(){

                            init();

                  }       

                  private void init(){}

                   protected void test(int k){}

}

         该示例代码中演示了各个访问控制符的实际使用示例,其中属性n的访问控制符就是默认的。

         在实际使用时,类声明的访问控制符只有2个:public和无访问控制符,属性声明、构造方法声明和方法声明的访问控制符可以是以上4种中的任何一个。

         4个访问控制符的权限作用如下表所示:

访问控制符

同一个类内部

同一个包内部

不同包中的子类

不同包中的非子类

public

Yes

Yes

Yes

Yes

protected

Yes

Yes

Yes

No

无访问控制符

Yes

Yes

No

No

private

Yes

No

No

No

         说明:在该表中,Yes代表具备对应的权限,No代表不具备对应的权限。

         4种访问控制中,public一般称作公共权限,其限制最小,也可以说没有限制,使用public修饰的内容可以在其它所有位置访问,只要能访问到对应的类,就可以访问到类内部public修饰的内容,一般在项目中开放的方法和构造方法使用public修饰,开放给项目使用的类也使用public修饰。protected一般称作继承权限,使用protected修饰的内容可以被同一个包中的类访问也可以在不同包内部的子类中访问,一般用于修饰只开放给子类的属性、方法和构造方法。无访问控制符一般称作包权限,无访问控制符修饰的内容可以被同一个包中的类访问,一般用于修饰项目中一个包内部的功能类,这些类的功能只是辅助其它的类实现,而为包外部的类提供功能。private一般称作私有权限,其限制最大,类似于文件中的绝密,使用private修饰的内容只能在当前类中访问,而不能被类外部的任何内容访问,一般修饰不开放给外部使用的内容,修改private的内容一般对外部的实现没有影响。

         下面以两个基本的示例来说明访问控制符在实际项目中的使用方式。

         第一个使用示例:在项目中,一般不会将类的属性开放给其它的类,也就是不允许外部的类直接访问属性,而是使用对应的存取方法来进行访问。例如在学校的学员管理系统中,需要实现的学生类,按照访问控制符的一般使用规则,实现的代码如下:

                   /**

 * 学员类,演示访问控制符的使用

 */

public class Student {

                            /**年龄*/

                            private int age;

                            /**学员ID*/

                            private int id;

                            public int getAge() {

                                      return age;

                            }

                            public void setAge(int age) {

                                      if(age < 0){

                                               //处理代码,未实现

                                      }

                                      this.age = age;

                            }

                            public int getId() {

                                      return id;

                            }

                            public void setId(int id) {

                                     //校验id是否合法的代码,未实现

                                      this.id = id;

                            }       

}

         通过将属性的访问权限设定为private,限制所有类外部对属性的访问,而为了让外部可以访问这些属性,专门声明对应的get/set方法来读取/存储数据,这样在设置属性值的set方法中,可以对于参数做出基本的校验,在上面的示例代码中,留出了校验参数的位置,具体的代码未在示例代码中实现。

         小技巧:在eclipse中,getset方法可以在选中对应类的代码以后,使用“Source”菜单中的“Generate Getters and Setters…”菜单实现。

         第二个使用示例:在项目中,一般为了设计的需要实现一些特定的功能,下面介绍一下使用访问控制符实现的一个功能——使一个类既不能创建对象也不能被继承。实现的方法如下:该类中只实现一个构造方法,而且将该构造方法的访问权限设置为私有的。具体实现代码如下:

                   /**

 * 不能创建对象且不能被继承的子类

 */

public class PrivateDemo {

                            private PrivateDemo(){}

}

         在该示例中,PrivateDemo类只有一个构造方法,且该构造方法为私有。按照以前的介绍,创建对象时需要调用构造方法,而private修饰的构造方法无法在类的外部进行访问,所以无法创建对象。另外,在子类的构造方法中也需要调用父类的构造方法,由于private的构造方法无法得到调用,所以该类也不可以有对应的子类。

         这里说明的只是两个基本的用途,在实际的项目中,可以根据需要灵活的使用访问控制符实现对应的功能。

         总之,访问控制符通过控制声明的内容的访问权限,实现对于内容的隐藏,从而降低使代码的耦合性降低,降低项目的复杂度,并且方便实际项目中代码的维护。

转自:http://blog.csdn.net/Mailbomb/

分享到:
评论

相关推荐

    java访问控制符.txt

    简要叙述什么是访问控制符,列出Java中的访问控制符,并说明各个访问控制符的控制权限

    as3.0访问控制符

    AS3.0中访问控制符:public、private、protected和internal的区别

    Java语言与面向对象程序设计第09讲(访问控制符和类的设计)

    java语言与面向对象设计PPT,讲解的很是详细,很适合初级学员仔细拜读,里面还有很多随堂练习题

    Java的访问控制符

    java的访问控制符分为两类:类的访问控制符,属性和方法的访问控制符。  1. 类的访问控制符有两种:public, default(默认的,什么都不用写)  default是包内访问控制符。  当然对于内部类还可以有static修饰,...

    Java类的修饰符、访问控制符

    实验目的 理解掌握Java类修饰符、访问控制符等;理解熟悉String类的equals方法和= =运算符;进一步熟悉面向对象基本概念;熟悉Java中对象声明、创建、访问、参数传值等基本语法;

    【后端】java基础(5.3)java高级基础之java的修饰符——访问控制符

    java的控制符可分为两大类,一种是访问控制符,另一种是非访问控制符。我们上文提到的public,private便是访问控制符了。 访问控制符:访问控制符的作用是说明被声明的内容(类、属性、方法和构造方法)的访问权限 ...

    13_访问控制符_2 视频

    13_访问控制符_2 视频文件(javase)

    12_访问控制符_1 视频

    12_访问控制符_1 视频文件(javase)

    剖析Java中的访问/非访问控制符以及神奇的main函数

    文章目录前言特性中的继承访问控制符成员访问控制符private默认protectedpublic类的访问控制符非访问控制符static静态域静态方法finalfinal类final方法final字段和局部变量main()方法 你好,我是goldsun。 你有想法...

    JAVA封装的特点、访问控制符.docx

    )封装的特点: 主要讲述封装与暴露 2)访问控制符 主要讲述private、不写、protected、public 3)指定原则:

    【后端】java基础(5.4)java高级基础之java的修饰符——非访问控制符

    上章讲了访问控制符,这章开始讲非访问控制符。 java中的非访问修饰符的作用各不一样,据我所知常用的有六种: static final abstract synchronized volatile transient 今天我们只讲前三种,后面三种等我们讲到线程...

    JAVA 面向对象程序设计第2章 面向对象进阶.pptx

    2.3.2 Java访问控制符;2.3.2 Java访问控制符;2.3.2 Java访问控制符;2.3.2 Java访问控制符;2.3.2 Java访问控制符;2.3.3 学生实践练习;2.3.3 学生实践练习;2.4 static关键字;2.4 static关键字;2.4.1 静态成员变量;...

    Java 中的访问权限控制

    NULL 博文链接:https://tonysmith.iteye.com/blog/1431942

    java实验报告 四个访问权限,抽象数据类型栈,计算器

    编写四个类A、B、C、D,其中类A、B在同一个包中,类C、D在另一个包中,且类C为类A的子类,通过这四个类来测试private,protected,public和friendly四个访问权限的区别。实现栈的基本操作。实现计算器。

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    10.1.1 饭前水果:实例变量的访问控制符 237 10.1.2 一切还是从汽车开始 238 10.1.3 一类车,一个类 241 10.1.4 分开也有麻烦 244 10.1.5 使用继承——问题迎刃而解 245 10.1.6 使用Bus类 248 10.1.7 Java中的...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    10.1.1 饭前水果:实例变量的访问控制符 237 10.1.2 一切还是从汽车开始 238 10.1.3 一类车,一个类 241 10.1.4 分开也有麻烦 244 10.1.5 使用继承——问题迎刃而解 245 10.1.6 使用Bus类 248 10.1.7 Java中的...

    Java中的封装和访问控制符

     封装是Java面向对象的三大特征之一(另外的两个特征为多态和继承),封装指的是将对象的状态信息隐藏在对象内部,从外面是看不出来的,当然也不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来...

    【05-面向对象(下)】

    •局部内部类不能在外部类以外的地方使用,那么局部内部类也不能使用访问控制符和static修饰 匿名内部类 •匿名内部类适合创建那种只需要一次使用的类,定义匿名内部类的语法格式如下: •new 父类构造器...

    实验指导书

    一、实验目的 1. 通过编制一个独立应用程序,使得学生掌握Java的系统所提供类的引用方法;...3. 掌握类及其成员的访问控制符,static等修饰符的用法。 4. 掌握类中各种变量的作用范围。 5. 掌握方法的重载。

    Java学习笔记-超强笔记

    实例变量的作用域至少在本类内部,受访问控制符的限制。 在重合作用域,实例变量和局部变量允许有命名冲突,“局部优先”。 定义方法: 格式: [ 修饰符 ] 返回类型 方法名( 参数列表 ) [ throws ...

Global site tag (gtag.js) - Google Analytics