Java程序设计:8 继承和多态.part2

上传人:桔**** 文档编号:568767878 上传时间:2024-07-26 格式:PPT 页数:28 大小:1.52MB
返回 下载 相关 举报
Java程序设计:8 继承和多态.part2_第1页
第1页 / 共28页
Java程序设计:8 继承和多态.part2_第2页
第2页 / 共28页
Java程序设计:8 继承和多态.part2_第3页
第3页 / 共28页
Java程序设计:8 继承和多态.part2_第4页
第4页 / 共28页
Java程序设计:8 继承和多态.part2_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《Java程序设计:8 继承和多态.part2》由会员分享,可在线阅读,更多相关《Java程序设计:8 继承和多态.part2(28页珍藏版)》请在金锄头文库上搜索。

1、读程序,改错误读程序,改错误u实验书:实验书:Page18.【题目题目7004】n程序程序1. 关于关于static的概念的概念n程序程序2:this的使用的使用n程序程序3:定义对象数组,初始化对象数组,数组元素:定义对象数组,初始化对象数组,数组元素赋值,数组元素下标赋值,数组元素下标Java程序程序设计设计1Java程序程序设计设计2Java 程序程序设计华南农业大学华南农业大学 教育技术教育技术 第第第第8 8章章章章 继承和多态继承和多态继承和多态继承和多态Part.2读程序,学概念读程序,学概念Java程序程序设计设计4Page.126多态多态8.2 多态多态u继承是面向对象技术另

2、外一个重要特征继承是面向对象技术另外一个重要特征多态性的多态性的基础。利用多态可以提高软件系统的灵活性、可理解基础。利用多态可以提高软件系统的灵活性、可理解性和可扩展性。性和可扩展性。 u面向对象程序设计的一个重要概念是面向对象程序设计的一个重要概念是“消息驱动消息驱动”。u消息消息n一个对象请求另一个对象协助完成某项任务的规格说明一个对象请求另一个对象协助完成某项任务的规格说明n消息中应当包括接收方的信息及具体请求的操作说明。消息中应当包括接收方的信息及具体请求的操作说明。u消息驱动消息驱动n当一个对象向另一个对象发送消息时,接收到消息的对象会当一个对象向另一个对象发送消息时,接收到消息的对

3、象会给予响应,使原本处于静态的对象被激活,这个过程称为消给予响应,使原本处于静态的对象被激活,这个过程称为消息驱动。息驱动。 8.2 多态多态u发送消息发送消息n一个对象调用另一个对象的方法;一个对象调用另一个对象的方法;u响应消息响应消息n被调用的方法的执行和返回过程。被调用的方法的执行和返回过程。 u多态性多态性n面向对象程序中不同类的对象接收到同一消息时,可能产生面向对象程序中不同类的对象接收到同一消息时,可能产生完全不同地响应结果,该现象称为多态性。完全不同地响应结果,该现象称为多态性。uJava语言中,多态性是指调用语言中,多态性是指调用不同类的对象不同类的对象中中相同签相同签名的方

4、法名的方法时,将执行不同代码段。时,将执行不同代码段。8.2 多态多态u实现多态性需要实现多态性需要3个要求:个要求:n(1)程序中必须通过)程序中必须通过继承继承形成类的层次关系。形成类的层次关系。n(2)响应消息的方法必须在类的层次关系中多次定)响应消息的方法必须在类的层次关系中多次定义。即该方法应该首先在义。即该方法应该首先在父类中定义父类中定义,然后在,然后在子类中子类中进行进行覆盖覆盖。n(3)发送多态消息的语句必须使用父类的引用变量)发送多态消息的语句必须使用父类的引用变量来引用对象。调用方法时,根据对象的实际类型而不来引用对象。调用方法时,根据对象的实际类型而不是引用变量类型决定

5、调用哪一个方法。是引用变量类型决定调用哪一个方法。u例例8-4:演示程序中多态性的使用:演示程序中多态性的使用: PolymorphismTest.java Java程序程序设计设计88.3 抽象类抽象类u抽象是面向对象技术解决问题的基本手段。抽象是面向对象技术解决问题的基本手段。u在类的继承层次中,沿着层次向下,各个子在类的继承层次中,沿着层次向下,各个子类变得越来越具体和专用;类变得越来越具体和专用;u而沿着层次向上,类就变得越抽象和通用。而沿着层次向上,类就变得越抽象和通用。u有时父类会设计的非常抽象,以至于它没有有时父类会设计的非常抽象,以至于它没有具体的实例,这样的类称为具体的实例,

6、这样的类称为抽象类抽象类。 8.3 抽象类抽象类uJava语言中使用关键字语言中使用关键字abstract修饰抽象类,抽象类修饰抽象类,抽象类的定义语法如下:的定义语法如下:n其他修饰符其他修饰符 abstract class 抽象类名抽象类名 u抽象类可以包括普通的成员方法,但通常一个抽象类应抽象类可以包括普通的成员方法,但通常一个抽象类应至少包含一个抽象方法。至少包含一个抽象方法。 u抽象方法抽象方法是使用是使用abstract修饰的修饰的没有定义方法体没有定义方法体的方的方法,其格式如下:法,其格式如下:n其他修饰符其他修饰符 abstract 返回类型返回类型 抽象方法名抽象方法名(形

7、参列表形参列表); u例例8-5:定义几何形状类用于计算面积和输出,为它们:定义几何形状类用于计算面积和输出,为它们设计一个抽象父类。设计一个抽象父类。 例例8-5:定义几何形状类用于计算面积和输出,为:定义几何形状类用于计算面积和输出,为它们设计一个抽象父类。它们设计一个抽象父类。u类的关系图类的关系图Java程序程序设计设计118.3 抽象类抽象类uJava语言使用抽象类时应该注意以下几个问题:语言使用抽象类时应该注意以下几个问题:n(1)任何包含抽象方法的类必须用)任何包含抽象方法的类必须用abstract修饰,修饰,否则会出现语法错误。否则会出现语法错误。n(2)抽象类有构造方法,但不

8、能创建对象。其构造)抽象类有构造方法,但不能创建对象。其构造方法是为子类调用准备的。方法是为子类调用准备的。n(3)抽象类定义的引用变量可以引用其任何子类的)抽象类定义的引用变量可以引用其任何子类的对象。对象。n(4)抽象类的具体子类应该覆盖父类的所有抽象方)抽象类的具体子类应该覆盖父类的所有抽象方法。没有被覆盖的抽象方法在子类中仍然是抽象的,法。没有被覆盖的抽象方法在子类中仍然是抽象的,此时子类是抽象子类。子类中覆盖父类的抽象方法通此时子类是抽象子类。子类中覆盖父类的抽象方法通常称为实现该抽象方法。常称为实现该抽象方法。n(5)static、private和和final不能用于修饰抽象不能用

9、于修饰抽象方法。方法。 Java程序程序设计设计138.4 接口接口uJava语言的接口(语言的接口(interface)是一种与类相)是一种与类相似的结构,只包含常量和抽象方法。常量定义使似的结构,只包含常量和抽象方法。常量定义使用用public static final修饰;抽象方法使用修饰;抽象方法使用public abstract修饰。修饰。u接口没有构造方法,不能创建对象。接口没有构造方法,不能创建对象。uJava语言接口的语法格式:语言接口的语法格式: 访问修饰符访问修饰符 interface 接口名接口名 /常量成员常量成员,使用,使用public static final修饰修

10、饰 /方法成员方法成员,使用,使用public abstract 修饰修饰 8.4 接口接口u使用接口的主要目的是使用接口的主要目的是统一公共常量统一公共常量、规范公规范公共的操作接口共的操作接口的管理。如果希望某个类能够符的管理。如果希望某个类能够符合某个接口定义的方法规范,则需要让这个类合某个接口定义的方法规范,则需要让这个类实现相应的接口。实现相应的接口。uJava语言中类语言中类实现接口实现接口的语法形式如下:的语法形式如下:修饰符修饰符 class 类名类名 extends 父类名父类名 implements 接口接口1, , 接口接口n 8.4 接口接口u一个一个Java类可以同时

11、实现多个接口。类可以同时实现多个接口。u类实现接口时,它会继承接口中所有的静类实现接口时,它会继承接口中所有的静态常量和抽象方法。如果类没有实现接口态常量和抽象方法。如果类没有实现接口中的所有抽象方法,则该类是抽象类。中的所有抽象方法,则该类是抽象类。u接口可以用来定义引用变量,该变量可以接口可以用来定义引用变量,该变量可以引用任何实现了该接口的类的对象。引用任何实现了该接口的类的对象。 1. Comparable接口的使用接口的使用uComparable接口是接口是Java类库中定义的一个类库中定义的一个接口,用于规范接口,用于规范Java程序中进行对象的大小比程序中进行对象的大小比较操作时

12、的格式。较操作时的格式。u该接口的源码如下:该接口的源码如下:public interface Comparable public int compareTo(Object o); /接口中接口中可以省略可以省略abstract修饰符修饰符 u其中的抽象方法其中的抽象方法compareTo是完成比较的方是完成比较的方法,调用形式为:法,调用形式为:int value = pareTo(obj2); 8.4 接口接口u归纳起来,归纳起来,Java语言中接口的主要作用是语言中接口的主要作用是事先制定完成某些操作的规范,如比较操事先制定完成某些操作的规范,如比较操作,所有意图实现这些操作的类都应该实

13、作,所有意图实现这些操作的类都应该实现制定规范的接口。现制定规范的接口。uJava语言允许一个类实现多个接口,也就语言允许一个类实现多个接口,也就是说一个类能够遵循多种操作规范。是说一个类能够遵循多种操作规范。2. Cloneable接口的使用接口的使用uJava语言中还有一种接口称为语言中还有一种接口称为“标记接口标记接口”,实现了这种接,实现了这种接口的类将具有口的类将具有Java赋予的某种能力。赋予的某种能力。u标记接口的特点是它没有定义抽象方法,类在实现标记接口标记接口的特点是它没有定义抽象方法,类在实现标记接口时无需实现任何抽象方法。时无需实现任何抽象方法。ujava.lang.Cl

14、oneable是一个标记接口,它用以说明一个是一个标记接口,它用以说明一个类具有类具有“克隆克隆”能力,就是该类的对象可以使用能力,就是该类的对象可以使用clone方法方法得到一个内容与原对象完全相同的新对象。得到一个内容与原对象完全相同的新对象。uclone方法是方法是Object类定义的一个类定义的一个protected方法,所有方法,所有类都继承了该方法,但要使类的对象具有克隆能力,还需要类都继承了该方法,但要使类的对象具有克隆能力,还需要覆盖该方法,并提升访问修饰符为覆盖该方法,并提升访问修饰符为public。 u例例8-6:重新定义:重新定义Circle类为类为Circle2,要求它

15、能够遵循对,要求它能够遵循对象比较操作规范和克隆对象的能力。象比较操作规范和克隆对象的能力。习题与实验习题与实验u课本第课本第139页页n复习题复习题8.1,8.2n编程练习编程练习8.3-8.5u实验第实验第20页页n题目题目8001:参看编程练习:参看编程练习8.3n题目题目8002-题目题目8004:读懂并理解程序:读懂并理解程序Java程序程序设计设计20Java程序程序设计设计21自学内容8.5 内部类内部类uJava语言的内部类是指定义在其他类内部定义的类,语言的内部类是指定义在其他类内部定义的类,包含内部类的类一般称为外部类。包含内部类的类一般称为外部类。u根据内部类常用的形式包

16、括:成员内部类和匿名内部根据内部类常用的形式包括:成员内部类和匿名内部类。类。uJava语言支持并使用内部类主要有以下原因:语言支持并使用内部类主要有以下原因:n(1)内部类对象可以访问其所有外部类的所有成员,包括)内部类对象可以访问其所有外部类的所有成员,包括private成员。成员。n(2)内部类能够被)内部类能够被private修饰,从而只能在其外部类内修饰,从而只能在其外部类内使用。使用。n(3)使用匿名内部类可以方便地定义运行时的回调方法。)使用匿名内部类可以方便地定义运行时的回调方法。n(4)图形用户界面编程中,使用内部类编写事件处理程序)图形用户界面编程中,使用内部类编写事件处理

17、程序非常方便。非常方便。8.5.1 成员内部类成员内部类uJava语言在内部类定义和使用时注意的一些问语言在内部类定义和使用时注意的一些问题:题:n(1)可以使用)可以使用4种访问修饰符都可以修饰内部类,种访问修饰符都可以修饰内部类,当使用当使用private时,内部类只能在其外部类使用。时,内部类只能在其外部类使用。n(2)可以使用)可以使用static把内部类定义为静态的。非静把内部类定义为静态的。非静态内部类中不能定义静态数据域和静态方法。态内部类中不能定义静态数据域和静态方法。n(3)内部类编译后的类文件名为:外部类名)内部类编译后的类文件名为:外部类名$内部内部类名类名.class。

18、n(4)内部类对象通常在外部类中创建并使用,实例)内部类对象通常在外部类中创建并使用,实例内部类对象的创建必须首先创建一个外部类对象后再内部类对象的创建必须首先创建一个外部类对象后再创建内部类对象;静态内部类对象可以直接创建对象。创建内部类对象;静态内部类对象可以直接创建对象。例子中例子中main方法说明了这一点。方法说明了这一点。 8.5.2 匿名内部类匿名内部类u匿名内部类是没有类名的内部类,它在一条语匿名内部类是没有类名的内部类,它在一条语句中完成定义内部类和创建内部类的一个对象。句中完成定义内部类和创建内部类的一个对象。u匿名内部类定义的常用的形式如下:匿名内部类定义的常用的形式如下:

19、new 父类名或接口名父类名或接口名() /实现或覆盖来自父类或接口的方法实现或覆盖来自父类或接口的方法 /如果需要,可以增加其他方法如果需要,可以增加其他方法 8.5.2 匿名内部类匿名内部类u匿名内部类是一种特殊但常用的内部类,在作用匿名内部类是一种特殊但常用的内部类,在作用过程中需要注意下面几个方面:过程中需要注意下面几个方面:n(1)匿名内部类是通过继承父类或实现接口的方式)匿名内部类是通过继承父类或实现接口的方式构建的,但不需要使用构建的,但不需要使用extends或或implements关关键字。键字。n(2)匿名内部类必须实现父类或接口的所有抽象方)匿名内部类必须实现父类或接口的

20、所有抽象方法,即匿名内部类不能是抽象的。法,即匿名内部类不能是抽象的。n(3)匿名内部类问题调用父类的无参构造方法创建)匿名内部类问题调用父类的无参构造方法创建对象。如果匿名内部类通过实现接口方式构建,则调对象。如果匿名内部类通过实现接口方式构建,则调用构造方法用构造方法Object()。n(4)匿名内部类编译产生的类文件名形式:外部类)匿名内部类编译产生的类文件名形式:外部类名名$n.class。其中。其中n是整数,表示该外部类的第是整数,表示该外部类的第n个个匿名内部类。匿名内部类。 8.6 基本数据类型与包装类基本数据类型与包装类uJava语言出于对程序效率的考虑,基本数据语言出于对程序

21、效率的考虑,基本数据类型没有作为对象处理。但是某些场合下需要类型没有作为对象处理。但是某些场合下需要将基本数据类型作为对象处理,将基本数据类型作为对象处理,Java使用一种使用一种简便的方式,为每一种基本数据类型提供一个简便的方式,为每一种基本数据类型提供一个对应的包装类。对应的包装类。u需要将某个基本数据类型作为对象处理时,使需要将某个基本数据类型作为对象处理时,使用其对应的包装类对象。用其对应的包装类对象。 8.6 基本数据类型与包装类基本数据类型与包装类u基本数据类型与包装类对应关系基本数据类型与包装类对应关系 8.6 基本数据类型与包装类基本数据类型与包装类u对包装类的使用可以遵循对包装类的使用可以遵循Java语言使用对象的基本语言使用对象的基本过程。为了提高编程的方便性,从过程。为了提高编程的方便性,从JDK5开始允许开始允许基本类型与对应的包装类之间进行类型转换。将基基本类型与对应的包装类之间进行类型转换。将基本类型的值转换为包装类对象称为装箱;反之称为本类型的值转换为包装类对象称为装箱;反之称为开箱。开箱。u如果基本类型的值出现在需要对象的情况中,编译如果基本类型的值出现在需要对象的情况中,编译器会自动装箱;如果包装类对象出现在需要基本类器会自动装箱;如果包装类对象出现在需要基本类型的情况,开箱也是自动进行的。型的情况,开箱也是自动进行的。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号