Presentation is loading. Please wait.

Presentation is loading. Please wait.

第6章 面向对象的高级特征 学习目标 本章要点 上机练习 习 题.

Similar presentations


Presentation on theme: "第6章 面向对象的高级特征 学习目标 本章要点 上机练习 习 题."— Presentation transcript:

1 第6章 面向对象的高级特征 学习目标 本章要点 上机练习 习 题

2 学习目标 Java程序是类与接口的集合,利用包可以将常用的类或功能相近的类放在一个程序包中。编写程序时,仅仅依靠程序员自己设计类或接口还不够,必须充分了解系统类库,大量调用系统类库是软件开发的基本技术。本章介绍包(package)、接口(interface)的功能与用法,最后介绍系统类库的使用。

3 本章要点 包的声明和引用 接口的声明、继承和实现 Java系统类库的基本结构和概念

4 在Java中,开发人员通过类来实现各项功能,根据不同的需求设计出大量的各式各样的类,并将这些类杂乱无章的存放在各个文件中。当他们需要使用这些类的时候,往往很难分清哪些类是一组的或者相互继承的,这给程序的开发带来了很大的麻烦。

5 包 为了避免这种情况的发生,Java语言使用了一种新的机制来将这些类分门别类的集中到一起,这种机制就是“包”。 包的声明 包的引用
应用举例——创建并引用包求素数

6 包的声明 一个包由一组类和接口组成,包中还可以包括子包,相当于文件夹中可以包含若干文件和子文件夹一样,因此包提供了一种多层命名空间。事实上,Java系统就是利用文件夹来存放包的,一个包对应一个文件夹,文件夹下有若干个class文件和子文件夹,开发人员可以把类放入指定包中。

7 包的声明 要使用程序包,即将程序中出现的类放在指定的包中,应首先在程序的当前目录中创建相应的子目录(可以是多层目录结构),然后将相应的源文件存放在这个文件夹中,再编译这个程序,就可形成用户自己的包。

8 包的声明 包的声明格式为: package 包名1[包2[包3…..]];
例如:Package person.student.information 包声明时,应注意以下几点:

9 包的声明 包的声明语句必须放在程序源文件的开始位置,包语句之前只能有注释语句,表示该文件中声明的全部类都属于这个包。
可以在不同的文件中使用相同的包声明语句,这时不同文件中定义的类都放在了同一个包中。

10 包的声明 包名通常都使用小写。 在Java中的任何一个源文件最多只能有一个包声明语句。 包名前可以带路径,形成多层次命名空间。

11 包的声明 包的名字有层次关系,各层间以点分隔,包层次必须与Java开发系统的文件结构相同。
【例6-1】 多层次包的建立(光盘:\源文件\第6章\例6-1.txt)。 建立了一个多层次包China.beijing.Tsinghua。说明:

12 包的声明 本例中所有类位于包China.beijing. Tsinghua中,包中每个类的完整名称是包名.类名,如China.beijing.qinghuadaxue.Test6_1。 同一个包中的类互相访问不需要指明包名,如果从外部访问一个包中的类,需要使用类的完整名称。

13 包的声明 包的存放位置必须与包名层次相对应的目录结构中一致。

14 包的声明 如果Test6_1.java位于f:\1000中,则编译产生的Test6_1.class必须位于f:\1000\China\beijing\Tsinghua中,所有这些目录都由开发人员自己建立,还要设置set classpath=.;f:\1000,此处的“.”代表当前目录。

15 包的声明 可以在编译时让javac产生于包名层次相同的目录结构,并把字节码文件放到此目录下,这样就不需要手动建立了,格式为:Javac –d .Test6_1.java。

16 包的引用 若要在程序里使用包中定义的类,应使用import语句引入包,告诉编译器类及包所在的位置,事实上,包名也是类的一部分。如果类在当前包中,则包名可以省略。

17 包的引用 包的引用格式是: import包名1[包2[包3…..]].(类名|*);
包名前可以指明层次关系,既可以精确到某一个类,也可以用通配符“*”表示当前包中的所有类。使用指明层次关系的方法可以提高程序的执行效率。

18 包的引用 包引用时,应注意以下几点。 一个程序中可以引入多个包, 但是一条import语句一次只能引入一个包,每个包也要用一条import语句引入。 JVM通常将包以一种压缩文件的形式(.jar)存储在特定的目录中。

19 包的引用 Java中的语言核心包java.lang包,包含常用类的定义,在程序运行时将自动引入,不需要使用import语句。
使用import语句引用某包中的所有类并不会自动引入其子包中的类, 应使用两条import语句分别引入。

20 包的引用 Event包虽然包含于awt包,但是仍需分别引入,只用第一条语句是不行的。

21 应用举例——创建并引用包求素数 本节应用举例将创建并引用包求素数(光盘:\源文件\第6章\应用举例sushu.txt),首先建立一个求素数的类“sushu”,然后再建立一个类“Test6_1”来引用它。

22 类“sushu”的运行结果

23 类“Test6_1”的运行结果

24 接 口 接口是方法定义和常量值的集合,只包含常量和方法的定义,而没有它们的实现。接口的定义解决Java语言中不能支持多重继承的缺陷。

25 接 口 接口的概念和意义 接口的声明和继承 接口的实现 接口回调 应用举例——定义并使用接口Animal

26 接口的概念和意义 接口是抽象类的变体。接口中的所有方法都是抽象的,即所有方法都只有方法名,而没有方法体。接口只可以定义static和final成员变量。 接口弥补了Java技术只有单继承这一不足之处。当类定义后只能扩展出单个类时,它能实现所需的多个接口。

27 接口的概念和意义 接口的实现与子类相似,当类实现某一接口时,它实现所有该接口的方法。然后,它可以在实现该接口的类的任何对象上调用该接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型,引用可以转换到接口类型或从接口类型转换,instanceof运算符可以用来决定某对象的类是否实现了接口。

28 接口的声明和继承 接口是用关键字interface来声明的,声明的基本格式如下。 [修饰符] interface 接口名 {
…...//常量和方法声明 }

29 接口的声明和继承 Java的编译系统会自动地把声明的变量当作一个常量来处理,即public static final类型,因此在接口中定义的变量必须被初始化,而且不能被修改,否则会出现编译时的错误。

30 接口的声明和继承 接口中的方法会被默认的修饰为public abstract,也可以使用一些访问控制符进行限制,如果有public,表示本接口可以被任何类实现,否则,只有同一个包中的类才可以实现这个接口。

31 接口的声明和继承 接口可以实现继承,一个接口可以继承父接口的所有成员。如在以下代码中,接口secondTransparency继承了上面代码中的接口Transparency中所有的属性和方法:

32 接口的声明和继承 public interface secondTransparency extends Transparency{ ……
}

33 接口的声明和继承 通过在extends后面增加接口名,可以实现接口的多重继承,格式如下:
interface 接口名 extends 接口名1,接口名2,接口名3…

34 接口的实现 在类声明时,可以通过关键字implements来表示该类调用或者说实现某个接口。关键字“implements”便是实现的意思,所谓“实现”就是重新定义方法体,使之可以实例化。当类调用一个接口后,该类就可以使用接口中定义的常量,

35 接口的实现 但必须实现接口中定义的所有方法。一个类可以实现多个接口,在implements子句中可用逗号分隔各个接口名。这时,类的定义格式为:class 类名 implements 接口名列表; 对于下述情况,接口是有用的。

36 接口的实现 声明方法,期望一个或更多的类来实现该方法。 揭示一个对象的编程接口,而不揭示类的实际程序体。
捕获无关类之间的相似性,而不强迫类关系。

37 接口的实现 描述“似函数”对象,它可以作为参数被传递到在其他对象上调用的方法中。它们是“函数指针”用法的一个安全的替代用法。
【例6-2】 接口的使用。定义接口“SayHello”,并在类“SayHelloImpl”中调用了该接口(光盘:\源文件\第6章\例6-2.txt)。

38 接口的实现 interface SayHello强制规定,实现它的所有的类必须有一个称做printMessage的方法,该方法带有一个void返回类型且没有输入参数。

39 接口回调 接口回调是多态的另一种体现,接口回调就是指当定义接口时,可以把使用某一接口的类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口中的方法。事实上,当接口变量调用被类实现的接口中的方法时,就会通知相应的对象调用接口的方法。

40 接口回调 【例6-3】 接口的回调(光盘:\源文件\第6章\例6-3.txt)。

41 应用举例——定义并使用接口Animal 本节的应用举例将定义并使用接口Animal(光盘:\源文件\第6章\应用举例TestInterface. txt)。

42 Java系统类库 Java提供了大量的系统类库供开发人员调用以简化编程过程,这些类库能帮助开发人员完成字符串、输入输出、声音、图形图像、数值运算和网络应用等方面的处理。

43 Java系统类库 Java类库包含在Java开发工具JDK中。Java类库包括接口和类,每个包中又有许多特定功能的接口和类,可以从包开始访问包中的接口、类、变量和方法。下面将简单的介绍一下各个包的功能。

44 Java系统类库 Java.lang包:是Java语言的核心类库,包含了运行Java程序必不可少的系统类,如基本数据类型、基本数学函数、字符串处理、线程、异常处理类等。 Java.io包:是Java语言的标准输入/输出类库,包含了实现Java程序与操作系统、用户界面以及其它Java程序做数据交换所使用的类。

45 Java系统类库 Java.applet包:是用来实现运行于Internet浏览器中的Java Applet的工具类库,它仅包含少量的几个接口和一个非常有用的类:Java.applet.Applet。

46 Java系统类库 Java.awt包:AWT(Abstract Window Toolkit)抽象窗口工具集,该包是Java语言用来构建图形用户界面(GUI)的类库,它包括了许多界面元素和资源,提供3个方面的支持:低级绘图操作;图形界面组件和布局管理;界面用户交互控制和事件响应。

47 Java系统类库 Java.net包:Java网络包,该包是Java语言用来实现网络功能的类库,主要包括:底层的网络通信;编写用户自己的Telnet、FTP、邮件服务等实现网上服务的类;用于访问Internet上资源和进行CGI网关调用的类。

48 Java系统类库 Java.math包:Java语言数学包,包括数学运算类和小数运算类,提供完善的数学运算方法。
Java.util包:Java实用程序包,包提供了Java语言中实用工具。 Java.security包:Java安全包,提供安全控制和管理,可对Java程序加密。

49 Java系统类库 Java.sql包:Java数据库包,是实现JDBC(Java database connection)的类库。利用它可使Java程序具有访问不同种类数据库的能力。

50 Java系统类库 Java.rmi包:Java远程方法调用包,实现远程方法调用,可在远程计算机上创建对象,在本地计算机上使用该对象。

51 Java系统类库 Java.text包:Java文本包,提供一种独立于自然语言的方式处理文本、日期、数字、消息的类和接口,实现日期、数字、消息的格式化和字符串搜索排序的功能。 Java.beans包:提供了一系列与Javabean开发有关的类。

52 上 机 练 习 本节通过定义与调用接口,包的创建和引用两个上机练习,帮助读者巩固本章所学的知识点。 定义和调用接口 包的创建和引用

53 定义和调用接口 本次上机练习将通过接口的定义和调用,演示接口的使用(光盘:\源文件\第6章\上机练习1.txt)。

54 类“InterFace”运行结果

55 包的创建和引用 通过本次练习熟练掌握包的创建和包的引用。
首先,创建一个包a1,然后,创建一个PackageExample类,最后该类引用了包a1(光盘:\源文件\第6章\上机练习2.txt)。

56 习 题 (1)编写一个程序实现抽象类。 (2)编写一个程序,实现包的建立和包的引入。


Download ppt "第6章 面向对象的高级特征 学习目标 本章要点 上机练习 习 题."

Similar presentations


Ads by Google