网络编程 (Java)第五讲(隐藏具体实现)_第1页
网络编程 (Java)第五讲(隐藏具体实现)_第2页
网络编程 (Java)第五讲(隐藏具体实现)_第3页
网络编程 (Java)第五讲(隐藏具体实现)_第4页
网络编程 (Java)第五讲(隐藏具体实现)_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第5章: 隐藏具体实现隐藏具体实现 湖南大学 软件学院 柳杨基本概念在面向对象设计中,要考虑的一个基本问题是“如何将变动的事物与保持不变的事物相互隔离”.类库可以被修改,但是使用旧的类库的客户端程序不会受影响.Java提供了访问权限修饰词(access specifier)供程序库开发人员来向客户端程序员指明哪些是可用的,哪些是不可用的. 访问权限控制的等级,从最大权限到最小权限依次为:public, protected,包访问权限 (没有关键词),和 private. 湖南大学 软件学院 柳杨5.1 包: 库单元 把完整的库都引入到程序中,格式如下:import java.util.*; 把

2、一个单一的类引入到程序中,格式如下:import java.util.ArrayList; 湖南大学 软件学院 柳杨5.1 包: 库单元Java中的编译单元 (有时也称为转译单元)l每个编译单元都有一个后缀名.javal在编译单元之中则可以有一个public类,该类的名称必须于文件的名称相同(包括大小写,但不包括文件的后缀名.java. l每个编译单元只能有一个public类,否则编译器就不会接受. 湖南大学 软件学院 柳杨5.1 包: 库单元如果使用了一个package语句,那它必须是文件中除注释以外的第一句程序代码,并且包名必须与该文件所在目录的目录名一致.包的声明如下: package

3、mypackage; public class MyClass / . . . 任何想要使用该名称的人都必须指定全名或是在与mypackage的结合中使用关键字import. 湖南大学 软件学院 柳杨5.1.1 创建独一无二的包名 将特定包的所有.class文件都置于一个单一目录之下.按照惯例,package名称的第一部分是反顺序的类的创建者的Internet域名.Internet域名应是独一无二的,因此package名称也将是独一无二的,也就不会出现名称冲突的问题了.Java解释器的运行过程如下:首先,找出环境变量CLASSPATH,在CLASSPATH中包含一个或多个目录,用来作为查找.c

4、lass文件的根目录.从根目录开始,解释器获取包的名称并将每个句点替换成反斜杠以从CLASSPATH 根中产生一个路径名称.得到的路径会与CLASSPATH中的各个不同的项相连接. 湖南大学 软件学院 柳杨5.1.1创建独一无二的包名 冲突 如果将两个含有相同名称的程序库以*形式同时导入,就会产生冲突.解决方法就是当使用这些类时,使用包含了包名的类的全名.import java.util.*; import com.bruceeckel.simple.*; Vector v = new Vector(); java.util.Vector v = new java.util.Vector();

5、 湖南大学 软件学院 柳杨5.1.2 定制工具库在Java中可以创建自己的工具库来减少或消除重复的程序代码. 示例net.mindview.util.Print.java、access.PrintTest.java湖南大学 软件学院 柳杨5.1.3 用imports改变行为 在Java中调试是一个条件编译很常见的用途。调试功能在开发过程中是使能的,而在打包的产品中是被禁止的.可以通过修改被引入的package的方法来实现这一目的,修改的方法是将在程序中用到的代码从调试版改为发布版。这一技术可以适用于任何种类的条件代码. 示例log4j.Test.java 湖南大学 软件学院 柳杨5.2 Jav

6、a访问权限修饰词public, protected和 private这几个java访问权限修饰词在使用时,是置于类中每个成员的定义之前的,无论它是一个字段或是一个方法. 每个修饰词都定义了它指定的访问权限. 湖南大学 软件学院 柳杨5.2.1 包访问权限 这是默认的访问权限修饰词,即没有任何关键字:l这就意味着当前的包中的其它类对那个成员都有访问权限. l包访问权限允许将包内所有相关的类组合起来,以使它们彼此之间可以轻松地相互作用. 湖南大学 软件学院 柳杨 package access.dessert; public class Cookie public Cookie() System.o

7、ut.println( Cookie constructor); void bite() System.out.println( bite); package access;import access.dessert.*; public class Dinner public Dinner() System.out.println(Dinner constructor); public static void main(String args) Cookie x = new Cookie(); /! x.bite(); / Cant access 5.2.2 public: 接口访问权限湖南大

8、学 软件学院 柳杨5.2.3 缺省包Java将在同一个目录中的文件自动看作是隶属于该目录的缺省包之中,于是它们为该目录中所有其他的文件都提供了包访问权限. package access; class Cake public static void main(String args) Pie x = new Pie(); x.f(); package access;class Pie void f() System.out.println( Pie.f(); 湖南大学 软件学院 柳杨5.2.4 private: 你不可以去碰 除了包含该成员的类之外,其他任何类都是无法访问这个成员的. class

9、 Sundae private Sundae() static Sundae makeASundae() return new Sundae(); public class IceCream public static void main(String args) /! Sundae x = new Sundae(); Sundae x = Sundae.makeASundae(); 湖南大学 软件学院 柳杨5.2.5 protected: 继承访问权 为了从现有类中继承,要声明新类extends(扩展)了一个现有类,如下所示: class Foo extends Bar 类Foo可以访问类B

10、ar中的public元素和protected元素. 示例access.cookie2.Cookie.java、access.ChocolateChip.java、access.ChocolateChip2.java湖南大学 软件学院 柳杨5.3 接口和实现 访问权限的控制常被视作是“具体实现的隐藏”. 把数据和方法包装进类中,与具体实现的隐藏结合到一起,常被称作是“封装”.封装的原因:l访问控制权 l将接口和具体实现分离,可以随意更改所有不是public的东西. 湖南大学 软件学院 柳杨5.4 类的访问权限 为了控制某个类的访问权限,修饰词必须出现于关键字class之前. 那就可以声明如下:p

11、ublic class Widget 然而,这里还有一些额外的限制: l每个编译单元(文件)都只能有一个public类. lpublic类的名称必须完全与含有该编译单元的文件名相匹配,包括大小写. l虽然不是很常用,但编译单元内完全不带public类也是可能的.在这种情况下,可以随意对文件命名.湖南大学 软件学院 柳杨总结无论是在什么样的关系之中,设立一些为各成员所遵守的界限始终是很重要的.如果不制定规则, 所有事物都要公开的.本章讨论了类是如何被构建成程序库的: l首先,介绍了一组类是如何被打包到一个程序库中的.l第二,类是如何对它的成员进行访问权限控制的.HomeWork10. Following the form of the example Lunch.java, create a class called ConnectionManager that manages a fixed array of Connection objects. The client programmer must not be able to explicitly create Conne

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论