《面向对象程序设计项目教程》课件 项目8 了解抽象类、接口和枚举_第1页
《面向对象程序设计项目教程》课件 项目8 了解抽象类、接口和枚举_第2页
《面向对象程序设计项目教程》课件 项目8 了解抽象类、接口和枚举_第3页
《面向对象程序设计项目教程》课件 项目8 了解抽象类、接口和枚举_第4页
《面向对象程序设计项目教程》课件 项目8 了解抽象类、接口和枚举_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

面向对象程序设计项目教程本章学习目标:●掌握抽象类的定义、应用和特点●掌握接口的定义、应用和特点●理解枚举类的定义和应用项目8了解抽象类、接口和枚举类任务1part掌握抽象类的应用

抽象类是对问题领域进行分析后得出的抽象概念,是对一批看上去不同,但是本质上相同的具体概念的抽象。

定义抽象方法只需在普通方法上增加abstract修饰符,并把普通方法的方法体全部去掉,并在方法后增加分号即可。抽象类和抽象方法必须使用“abstract”关键字来修饰,其语法格式如下:【访问符】abstractclass类名{

【访问符】abstract<返回值类型>方法名([参数列表]);…}1.1抽象类的定义

有抽象方法的类只能被定义为抽象类,但抽象类中可以没有抽象方法。定义抽象类和抽象方法的规则如下:

(1)abstract关键字放在class前,指明该类是抽象类。

(2)abstract关键字放在方法的返回值类型前,指明该方法是抽象方法。

(3)抽象类不能被实例化,即无法通过new关键字直接创建抽象类的实例。

(4)一个抽象类中可以有多个抽象方法,也可以有实例方法。

(5)抽象类可以包含成员变量、构造方法、初始化块、内部类、枚举类和方法等,但不能通过构造方法创建实例,可在子类创建实例时调用。

(6)定义抽象类有三种情况:直接定义一个抽象类;继承一个抽象类,但没有完全实现父类包含的抽象方法;实现一个接口,但没有完全实现接口中包含的抽象方法。

1.1抽象类的定义

抽象类不能实例化,只能被当成父类来继承。从语义角度上讲,抽象类是从多个具有相同特征的类中抽象出来的一个父类,具有更高层次的抽象,作为其子类的模板,从而避免子类设计的随意性。。1.2抽象类的使用

抽象类体现的就是一种模板模式的设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展、改造,但子类总体上会大致保留抽象类的行为方式。

如果编写一个抽象父类,父类提供了多个子类的通用方法,并把一个或多个方法留给子类实现,这就是一种模板模式,模板模式也是十分常见且简单的设计模式之一。

1.3抽象类的作用任务2part掌握接口的应用2.1接口的定义Java只支持单继承,不支持多重继承,即一个类只能继承一个父类,这一缺陷可以通过接口来弥补。Java允许一个类实现多个接口,这样使程序更加灵活、易扩展。和类定义不同,定义接口不再使用class关键字,而是使用interface关键字。接口定义的基本语法格式如下:

【访问符】interface接口名{//静态常量定义//抽象方法定义//默认方法、类方法、内部类等其他定义}2.1接口的定义

其中,定义接口要遵守如下规则:

(1)访问符可以是public或者默认,默认采用包权限访问控制,即在相同包中才可以访问该接口。

(2)在接口体力可以包含静态常量、抽象方法、内部类、内部接口以及枚举类的定义。从Java8版本开始允许接口中定义默认方法、类方法。

(3)与类的默认访问符不同,接口体内定义的常量、方法等都默认为public,可以省略public关键字。

(4)接口名应与类名采用相同的命名规范。

(5)接口里不能包含构造方法和初始化块。

2.1接口的定义在接口中声明静态常量、抽象方法、默认方法、类方法、内部类和内部接口。其中:

(1)接口中定义的成员变量如果没有声明修饰符,系统会自动为其增加“publicstaticfinal”进行修饰,即接口中定义的成员变量都是静态常量。

(2)接口中定义的方法只能是抽象方法、默认方法和类方法。因此,如果是定义普通方法没有声明修饰符,系统将自动增加“publicabstract”进行修饰,即接口中定义的普通方法都是抽象方法,不能有方法体。

(3)从Java8开始,允许在接口中定义默认方法,默认方法必须使用“default”关键字修饰,不能使用“static”关键字修饰。因此,不能直接使用接口来调用默认方法,必须通过接口的实现类的实例对象来调用默认方法,默认方法必须有方法体。

(4)从Java8开始,允许在接口中定义类方法,类方法必须使用“static”关键字修饰,不能使用“default”关键字修饰,类方法必须有方法体,可以直接通过接口来调用类方法。

(5)接口中定义的内部类、内部接口以及内部枚举都默认为“publicstatic”。2.2接口的实现

接口不能用于创建实例,但接口可以用于声明引用类型变量。当使用接口来声明引用类型变量时,这个引用类型变量必须引用到其实现类的对象。除此之外,接口的主要用途就是被实现类实现。

一个类可以实现一个或多个接口,实现则使用implements关键字。由于一个类可以实现多个接口,这也是为Java单继承灵活性不足所做的补充。类实现接口的语法格式如下:

【访问符】【修饰符】class类名implements接口名1[,接口名2…]{//类体部分}2.2接口的实现

其中:

(1)访问符、修饰符、class和类名与前面类的声明格式完全相同。

(2)implements关键字用于实现接口。

(3)一个类可以实现多个接口,接口之间使用逗号隔开。

(4)一个类在实现一个或多个接口时,必须全部实现这些接口中定义的所有抽象方法,否则该类必须定义为抽象类。

(5)一个类实现某个接口时,该类将会获得接口中定义的常量和方法等。2.3接口的继承

接口的继承与类的继承不一样,接口完全支持多重继承,即一个接口可以有多个父接口。除此之外,接口的继承与类的继承相似,当一个接口继承父接口时,该接口将获得父接口中国定义的所有方法和常量。

一个接口可以继承多个接口时,多个接口跟在extends关键字之后,并用逗号隔开,接口继承语法格式如下:

【访问符】interface子接口名extends父接口名1[,父接口名2…]{//子接口新增的常量和方法}2.3接口的继承

接口和抽象类有很多相似之处,都具有如下特征:

(1)接口和抽象类都不能被实例化,都需要被其他类实现或继承。

(2)接口和抽象类的引用变量都可以指向其实现类或子类的实例对象。

(3)接口和抽象类都可以包含抽象方法,实现接口和继承抽象类时都必须实现这些抽象方法。2.3接口的继承

但接口与抽象类之间也存在区别,主要体现在以下几点:

(1)接口体现的是一种规范,这种规范类似于总纲,是系统各模块应该遵循的标准,以便各模块之间实现耦合以及通信功能;抽象类体现的是一种模板式设计,抽象类可以被当成系统实现过程中的中间产品,该产品已实现了部分功能但不能当成最终产品,必须进一步完善,而完善可能有几种不同的方式。

(2)接口中除了默认方法和类方法,不能为普通方法提供方法实现,而抽象类可以为普通方法提供方法实现。

(3)接口中定义的变量默认为publicstaticfinal,且必须赋值,其实现类中不能重新定义,也不能改变其值,即接口中定义的变量都是最终的静态常量;而抽象类中定义的变量与普通类一样,默认为友好的,其实现类可以重新定义也可以根据需要改变值。

(4)接口中定义的方法都默认为public,而抽象类则与普通类一样,默认为友好的。

(5)接口不包含构造方法,而抽象类可以包含构造方法。抽象类的构造方法不是用于创建对象,而是让其子类调用以便完成初始化操作。

(6)一个类最多只能有一个直接父类,包括抽象类;但一个类可以直接实现多个接口,一个接口也可以有多个父接口。任务3part掌握枚举类的应用枚举类是一种特殊的类,与普通类有如下区别:

●枚举类可以实现一个或多个接口,使用enum定义的枚举类默认继承了java.lang.Eunm类,而不是继承Object类,因此枚举类不能显示继承其他父类。

●使用enum定义非抽象的枚举类时默认会使用final修饰,因此枚举类不能派生子类。

●枚举类的构造方法只能使用private访问修饰符,如果省略,则默认使用private修饰;如果强制指定访问修饰符,则只能指定为private。

●枚举类的所有实例必须在枚举类的类体第一行显式列出,否则该枚举永远不能产生实例。列出的枚举实例默认使用publicstaticfinal进行修饰。枚举本节概述3.1枚举类的定义

使用enum关键字来定义一个枚举类,语法格式如下:[修饰符]enum枚举类名{ //第一行列举枚举实例 ......}

下述代码定义一个季节枚举类,该枚举类中有4个枚举实例:春、夏、秋、冬。代码如下所示。

【代码8.7】SeasonEnum.javapackagecom;publicenumSeasonEnum{ //在第一行列出4个枚举实例:春、夏、秋、冬 SPRING,SUMMER,FALL,WINTER;}3.1枚举类的定义

上述代码中SPRING、SUMMER、FALL、WINTER被称为枚举实例,其类型就是声明的SeasonEnum枚举类型,其默认使用publicstaticfinal进行修饰。枚举实例之间使用英文格式逗号“,”隔开,枚举值列举之后使用英文格式分号“;”结束。

枚举一旦被定义,就可以直接使用该类型的枚举实例,枚举实例的声明和使用方式类似于基本类型,但不能使用new关键字实例化一个枚举。所有枚举类型都会包括两个预定义方法:values()和ValueOf(),其功能描述如表8-1所示。3.1枚举类的定义

对上述代码需要注意三点:

●调用values()方法可以返回SeasonEnum枚举类的所有实例值;

●定义一个枚举类型的对象时,不能使用new关键字,而是使用枚举类型的实例值直接赋值;

●在switch语句中直接使用枚举类型作为表达式进行判断,而case表达式中的值直接使用枚举实例值的名字,前面不能使用枚举类作为限定。3.2包含属性和方法的枚举类

枚举类也是一种类,具有

温馨提示

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

评论

0/150

提交评论