[6]访问权限控制 0X03
2016-07-25 11:24
369 查看
接口和实现
访问权限的控制常被称为是“具体实现的隐藏”。把数据和方法包装进类中,以及具体实现的隐藏,常共同被称为是“封装”。其结果是一个同时带有特征和行为的数据类型。封装的原因
1.为了设定客户端程序员对代码的是否可以使用的边界。
2.接口和具体实现的分离:可以随意修改非public的东西,而不会对客户端代码带来影响。
建议的书写方式
public class OrganizedByAccess{ public void pub1(){} public void pub2(){} public void pub3(){} private void priv1(){} private void priv2(){} private int i; }
将public对外公开的方法写在最前面,具体实现靠后。
类的访问权限
如果希望把类库中的某个类为客户端程序员所用,就可以把关键字public作用于整个类来定义达到目的。(关键字至于class之前)下面写一些细节:
额外的限制
1.每个编译单元(类文件)都只能有一个public类。这表示,每个编译单元都有单一的公共接口,用public类来表现。该接口可以按要求包含众多的支持包访问权限的类。如果在某个编译单元内有一个以上的public类,编译器就会给出出错信息。
2.public类的名称必须完全与含有该编译单元的文件名相匹配,包括大小写。所以对于Widget而言,文件的名称必须是Widget.java.如果不匹配,同样会得到编译时错误。
3.虽然不常用,但编译单元内完全不带public类也是可能的。在这种情况下,可以随意对文件命名。
特别注意的地方
1.类即不可以是private的(这样会使得除该类之外,其他任何类都不可以访问它),也不可以是protected的。所以对于类的访问权限,仅有两个选择:包访问权限和public。
2.如果不希望其他任何人对该类拥有访问权限,可以把所有的构造器都指定为private,从而阻止任何人创建该类的对象,但有一个例外,就是你在该类的static成员内部可以创建。这个也是一个技巧,看代码:
package me.funnyzhao.main; //:TestDo.java //私有的构造器 class Soup1{ private Soup1(){} public static Soup1 makeSoup(){ return new Soup1(); } } class Soup2{ private Soup2(){ System.out.println("sp~~"); } private static Soup2 sp=new Soup2(); /** * 获取静态对象 * @return */ public static Soup2 access(){ return sp; } public void f(){ System.out.println("f"); } } public class TestDo { void testPrivate(){ // ! Soup1 sp=new Soup1(); } void testStatic(){ Soup1 sp1=Soup1.makeSoup(); } void testSingleton(){ //由于Soup2的构造器是私有的,因此无法实例化对象, //只能通过静态方法来访问 Soup2.access().f(); } }
Soup2用到了单例的设计模式,即外界只能通过public的access方法访问Soup2对象,并且这个对象有且只有一个。
总结:
访问权限控制对于实际的开发最重要的作用是:合理的使用访问权限控制可以确保不会有任何客户端程序员依赖于某个类的底层实现的任何部分,做到接口和实现的分离,对于程序后期的扩展性、健壮性都有好处。
相关文章推荐
- jQuery Ajax 全局调用封装实例代码详解
- 自己简单封装的一个CDialog类实例
- C# 面向对象三大特性:封装、继承、多态
- PHP类的封装与继承详解
- 理解javascript封装
- 简单理解JavaScript中的封装与继承特性
- javascript封装简单实现方法
- 封装好的一个万能检测表单的方法
- Ajax基础教程之封装(三)
- jquery datatable后台封装数据示例代码
- 详解js中class的多种函数封装方法
- 【经典源码收藏】基于jQuery的项目常见函数封装集合
- 基于jQuery的ajax方法封装
- c#基础学习之封装
- 使用对象封装ajax重复调用的方法
- 原生AJAX封装的简单实现
- Java游戏服务器之数据库表存取封装
- 纯JavaScript实现的兼容各浏览器的添加和移除事件封装
- PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)
- javascript的函数、创建对象、封装、属性和方法、继承