Java程序设计简明教程 教学课件 ppt 作者 李永杰 陈鑫伟 第5章 Java面向对象编程进阶

上传人:E**** 文档编号:89399550 上传时间:2019-05-24 格式:PPT 页数:30 大小:255.50KB
返回 下载 相关 举报
Java程序设计简明教程 教学课件 ppt 作者  李永杰 陈鑫伟 第5章  Java面向对象编程进阶_第1页
第1页 / 共30页
Java程序设计简明教程 教学课件 ppt 作者  李永杰 陈鑫伟 第5章  Java面向对象编程进阶_第2页
第2页 / 共30页
Java程序设计简明教程 教学课件 ppt 作者  李永杰 陈鑫伟 第5章  Java面向对象编程进阶_第3页
第3页 / 共30页
Java程序设计简明教程 教学课件 ppt 作者  李永杰 陈鑫伟 第5章  Java面向对象编程进阶_第4页
第4页 / 共30页
Java程序设计简明教程 教学课件 ppt 作者  李永杰 陈鑫伟 第5章  Java面向对象编程进阶_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《Java程序设计简明教程 教学课件 ppt 作者 李永杰 陈鑫伟 第5章 Java面向对象编程进阶》由会员分享,可在线阅读,更多相关《Java程序设计简明教程 教学课件 ppt 作者 李永杰 陈鑫伟 第5章 Java面向对象编程进阶(30页珍藏版)》请在金锄头文库上搜索。

1、第5章 Java面向对象编程进阶,5.1 内部类和匿名类,在此之前,本书介绍的类中,都只是由属性和方法构成的,而在实际编程中,一个类的内部也可以包含一个类,并将这个类称之为内部类。在这一节中,将介绍Java语言中内部类的概念和用法。这也是Java程序中比较高级的一种用法,还会用实际的例子来介绍其使用方法。,5.1.1 什么是内部类,内部类就是定义在其他类内部的类,而内部类所在的类一般称之为外部类。根据内部类在外部类中所处的位置,一般又分为:定义在方法体内的内部类,以及定义在方法体外的成员内部类两种。同时,定义在方法体内的内部类又可以分为两种,分别是:有实例名称的内部类和无实例名称的匿名内部类。

2、,5.1.2 使用内部类,对内部类的引用,根据内部类在外部类中的位置而不同。因此使用内部类会分为以下几种方式。 1对于定义在方法体外的内部类(成员内部类) 2对于定义在方法体内的内部类,5.1.3 什么是匿名类,在创建类的对象的时候,会有两种方式,第一种方式是创建对象后,将该对象保存在一个对象变量中,如下所示。 类名 对象名 = new 类构造方法(); 另一种方式,就是所谓的匿名类方式创建对象。使用匿名类方式创建对象时,并不将创建出的对象保存在对象变量中。程序会根据创建对象的构造方法中的操作,来运行程序,当程序运行结束后,该对象生命周期也就结束了,如下所示。 new 类构造方法();,5.1

3、.4 使用内部类需要注意的问题,在使用内部类的时候,很多细节需要在编程过程中注意,否则会出现编译错误,归纳总结如下所示。 (1)Java程序中,对于内部类的继承没有限制,与普通的类一致,满足单继承。同时对内部类的嵌套层次也没有限制; (2)内部类同一般类一样,可以实现接口;,5.1.4 使用内部类需要注意的问题,(3)非静态的内部类可以看作是外部类中的普通方法,对整个类具有访问权限,可以访问其所在类的所有属性。包括private私有属性。但是非静态的内部类中不能包含static类型的属性。非静态的内部类可以被不同访问修饰符修饰,也可以被其他外部类的成员函数所访问; (4)静态内部类可以看作是外

4、部类中的static方法,只能访问声明为static的变量,以及调用static型的方法;,5.1.4 使用内部类需要注意的问题,(5)定义在方法体中的内部类,可以看作是方法中的局部变量,可以访问外部类中的所有属性,包括private型私有属性; (6)定义在方法体中的内部类,可以访问所在方法中被声明为final型的局部常量; (7)定义在方法体中的内部类,不能用任何访问修饰符修饰,同时也不能使用static修饰符来修饰。,5.2 抽 象 类,在之前,本书已经介绍了面向对象编程的所有基本工具,下面将要介绍另外两种较为常用的技术:抽象类和接口。,5.2.1 抽象类和抽象方法,abstract关键

5、字是抽象修饰符,只能用于修饰类和方法。该关键字用来表明所定义的类或方法是未实现的。 (1)抽象类:当一个类被声明为abstract时,那么这个类就是一个抽象类。所谓抽象类,实际上就是没有具体实例对象的类。如:之前所举例中的交通工具类就是一个抽象的类,其不存在一个仅属于它的具体的对象。简单的说,抽象类就是一种经过优化的概念组织方式,把所要描述一类事物的共性抽象出来,使得所有的概念层次置鳌蚪唷,5.2.2 如何定义和使用抽象类,下面就用一个具体的例子说明如何使用抽象类。代码中,定义抽象类People,用来描述人的属性,同时定义Employee员工类继承了People类,并在Employee员工类中

6、实现抽象类中的方法。,5.3 继 承,继承是两个类之间的一种关系。当一个类A继承了一个已存在的类B后,类A就拥有了类B所有的非private的属性和方法,但同时,类A中还可以根据需要添加新的方法和属性。简单的说,继承就是创建一个新的类,并使这个类复制了一个已经存在的类,并在其基础上进行了扩展。一般会将被继承的类称为父类或超类,继承父类或超类的类称之为子类。 在Java语言中,一个类可以拥有多个子类,但是一个子类只能拥有一个父类。父类实际上是所有子类的公共属性的集合。而每一个子类则是父类的一个扩展或特殊化。,5.3.1 子类,在Java程序中,若要定义子类,就需要使用“extends”关键字。其

7、语法格式如下所示。 class 子类名 extends 父类名 ; /类体:包含属性和方法 “extends”表明要构造的新类(子类),是从一个已有的类(父类)衍生出来的。子类中继承了父类中非private的全部属性和方法,同时还可以定义新的属性的方法。,5.3.2 覆盖父类中的方法,使用继承的过程中,可以实现方法的重载。在第五章中曾经介绍过,方法重载实现了对同一个方法名的复用,只是存在于父类和子类之间。当父类中的一个方法在它的子类中重新获得定义时,若该方法的方法名、参数、返回值类型均不变,只有方法体发生了变化时,就称子类的方法重载了父类方法。 创建Manager经理类,该类继承了Employ

8、ee雇员类,同时在Manager类中,使用方法重载,重新定义Employee类中的getInfo()和getSalary()方法。,5.3.3 this关键字的使用,在定义类方法的时候,可能希望引用当前定义的类的对象,这样就可以使用该对象的实例变量,或将当前对象作为参数传递给其他的方法。在这种情况下,要引用当前对象,就可以使用this关键字。换句话说,this关键字就好像创建一个虚拟的类对象实例,在定义类的时候,就提前使用其对象实例。,5.3.4 super关键字的使用,当子类继承父类后,若要在子类中直接调用父类的构造方法,就必须使用super()语句,但需要注意以下两点: (1)若要在子类构

9、造方法中调用父类构造方法,super()语句必须放在子类构造方法中的第一行; (2)不能在子类构造方法中同时调用this()和super()语句,因为这两条语句都必须位于子类构造方法中的第一行。,5.3.5 继承的层次结构,Java语言的继承关系中,一个类最多只能有一个父类。但一个父类可以同时拥有多个不同的子类。换句话说,父类实际上是所有子类的公共属性的集合。而每一个子类则是父类的一个扩展或特殊化。在这里以交通工具这个抽象概念为例,来说明类之间继承的层次结构。 交通工具类是所有交通工具的共同属性的集合,这些共同属性包括移动速度、承载人数、载货量、所处状态等静态属性,同时也包含了启动、停止、加速

10、、减速、维修等一些动态的行为方法。在这个基础上,将交通工具类具体化、特殊化,就会派生出三个子类,包括:陆地交通工具、海上煌吆涂罩薪通工具三个子类。,5.4 包,package包是用于组织类的一种方式。一个包中可以包含任意数量的类,而这些类的用途都是相关或有继承关系的。通过包的使用,软件开发人员可以很方便地组织和管理自己的工作,并把它和其他的源代码库分隔开来。如果程序比较小,且用的类不多,就根本没有必要使用包。但当随着程序员创Java程序越来越多,拥有的类也越来越多的时候,就可以使用包来将所有的类分组。使用包的好处主要表现在: (1)包能够让程序员将类组织成单元,通过文件夹或目录来组织文件和应用

11、程序; (2)包减少了名称冲突带来的问题(也就是类重名的问题); (3)保能够更大面积的保护类、变量和方法,而不是分别对每个类进行保护; (4)包可以用于标示类。,5.5 接 口,Java中的接口主要用来描述类可以充当什么样的角色,也就是描述类可以具有什么样的功能,但并不给出每个功能的具体实现。本节将对与接口相关的各方面的知识进行详细的介绍,主要包括概述及其特性、方法及成员变量在接口中的使用、接口与抽象类、基于接口的多态、接口与回调等内容,5.5.1 接口概述,当定义一个接口时,实际上是在编写一个契约,用来描述实现其的类能够做什么,能够充当什么样的角色。而接口中并没有功能的具体实现,具体实现由

12、签了契约的类自己来进行,但实现时必须满足接口中的要求。 例如:可以编写一个接口Flyer,代表飞行器的角色,在该接口中定义了起飞方法。这样,具有飞行器功能(充当飞行器角色)的所有类都可以实现该接口,并具体实现接口中的方法,不同的类可以有不同的方法实现。,5.5.2 成员变量在接口中的使用,本节将详细介绍接口中成员变量的相关知识,主要包括语法规则与接口中成员变量的作用两个方面的内容。 1语法规则 与类不同的是,在接口中只能定义常量属性,并且可以不必显式使用关键字public、static和final进行修饰,即使不使用这些修饰符,编译时也会为其自动加上。也就是说,接口中的变量隐含是“public

13、 static final”的。,5.5.2 成员变量在接口中的使用,2接口中成员变量的作用 接口相当于一份契约,契约具有的属性应该是不变的,因此接口内只能放置常量。这样做能够保证实现该接口的任何类都可以访问相同的常量,不能动态将其值随意进行修改,同时使用声明的常量也会增强代码的可读性。,5.5.3 方法在接口中的使用,可以将接口看作是“纯粹”的抽象类,因为接口中定义的方法必须是抽象的,原因是接口只是代表一个契约,表示实现其的类有什么样的功能,具体的实现是由实现它的类完成的。本节将专门介绍接口中的方法,主要包括语法规则、如何实现接口、接口引用的使用以及接口中方法无法使用的修饰符等内容。,5.5

14、.3 方法在接口中的使用,1语法规则 当定义接口中的方法时,需要满足以下规则。 (1)所有接口方法隐含都是公有的和抽象的,不需要在方法声明中实际输入public和abstract修饰符,因为就算不写,编译器也会为其自动添加。 (2)接口方法一定不能是静态的,也一定不能是最终的,也不能用public修饰符之外的其他访问限制修饰符进行修饰。也就是说,要给接口中的方法写修饰符,只能写public和abstract。,5.5.3 方法在接口中的使用,2实现接口 这里将从两个方面介绍接口的实现,如下所示。 (1)接口实现的基本语法 (2)接口中方法的实现与使用,5.5.3 方法在接口中的使用,3接口引用

15、的使用 这里主要分3部分对接口引用的使用进行介绍,如下所示。 (1)可以指向的对象类型 (2)接口引用间的赋值 (3)类引用与接口引用间的赋值,5.5.3 方法在接口中的使用,4接口中方法无法使用的修饰符 由于接口中的方法是抽象的,并且接口应该是对外公开的,所以就无法为其修饰成静态的、最终的或非public的访问限制。 (1)接口中的方法与static (2)接口中的方法与final (3)接口中方法的访问限制,5.5.4 接口与抽象类,到目前为止,读者可能觉得接口与抽象类很像,它们里面都有抽象的方法,都不能实例化。甚至有的读者会想,既然这么像,只要一种不是更好。但其实它们的含义及其想解决的问

16、题都是截然不同的,本节将从两个方面介绍它们之间的不同。 1语法上的不同 2具体含义的不同 接口与抽象类在具体含义上有很大的不同,抽象类更注重其是什么及其本质;而接口则不是,接口更注重其具有什么样的功能及其能充当什么样的角色。,5.5.5 instanceof的使用,在实际运行时由于多态的原因,引用指向的对象不一定是引用类型的。这时,可能需要测试引用指向的对象的类型情况,就会使用到instanceof关键字,本节将对其进行详细的介绍。 1基本语法与使用 (2)null引用的使用 (3)数组引用的使用 2不允许进行测试的情况,5.6 小 结,本章首先介绍了Java的一项基本特性继承,及其具体的实现方法。通过本章的学习,为读者后面学习更多其他方面面向对象的知识打下了良好的基础。本章介绍了Java中的一项重要技术接口,是Java中实现多态与程序灵活性的一项重要手段,读者要注意区分抽象类与接口所扮演角色的不同,进一步加深对面向对象思想的理解,在以后的实际开发中恰当使用接口技术,提高程序的应变能力。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

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