书签 分享 收藏 举报 版权申诉 / 48
上传文档赚钱

类型《Java程序设计教程》课件第八章:抽象类、接口和枚举.pptx

  • 上传人(卖家):momomo
  • 文档编号:7669173
  • 上传时间:2024-06-23
  • 格式:PPTX
  • 页数:48
  • 大小:3.31MB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《《Java程序设计教程》课件第八章:抽象类、接口和枚举.pptx》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    Java程序设计教程 Java 程序设计 教程 课件 第八 抽象 接口 枚举
    资源描述:

    1、本章学习目标:掌握抽象类的定义、应用和特点掌握接口的定义、应用和特点理解枚举类的定义和应用第八章第八章 抽象类、接口和枚举抽象类、接口和枚举第第1 1节节part抽象类 在定义类时,并不是所有的类都能够完整地描述该类的行为。在某些情况下,只知道应该包含怎样的方法,但无法准确地知道如何实现这些方法时,可以使用抽象类。抽 象 类本节概述 抽象类是对问题领域进行分析后得出的抽象概念,是对一批看上去不同,但是本质上相同的具体概念的抽象。例如,定义一个动物类Animal,该类提供一个行动方法action(),但不同的动物的行动方式是不一样的,如牛羊是跑的,鱼儿是游的,鸟儿是飞的,此时就可以将Animal

    2、类定义成抽象类,该类既能包含action()方法,又无须提供其方法的具体实现。这种只有方法头,没有方法体的方法称为抽象方法。定义抽象方法只需在普通方法上增加abstract修饰符,并把普通方法的方法体全部去掉,并在方法后增加分号即可。抽象类和抽象方法必须使用“abstract”关键字来修饰,其语法格式如下:【访问符】abstract class 类名 【访问符】abstract 方法名(参数列表);8.1.1抽象类的定义抽象类的定义 有抽象方法的类只能被定义为抽象类,但抽象类中可以没有抽象方法。定义抽象类和抽象方法的规则如下:(1)abstract关键字放在class前,指明该类是抽象类。(2

    3、)abstract关键字放在方法的返回值类型前,指明该方法是抽象方法。(3)抽象类不能被实例化,即无法通过new关键字直接创建抽象类的实例。(4)一个抽象类中可以有多个抽象方法,也可以有实例方法。(5)抽象类可以包含成员变量、构造方法、初始化块、内部类、枚举类和方法等,但不能通过构造方法创建实例,可在子类创建实例时调用。(6)定义抽象类有三种情况:直接定义一个抽象类;继承一个抽象类,但没有完全实现父类包含的抽象方法;实现一个接口,但没有完全实现接口中包含的抽象方法。下述代码示例了抽象类和抽象方法的定义,代码如下所示。8.1.1抽象类的定义【代码8.1】Shape.javapackage com

    4、;public abstract class Shape private String color;/初始化块 System.out.println(执行抽象类中的初始化块);/构造方法 public Shape()public Shape(String color)this.color=color;System.out.println(执行抽象类中的构造方法);8.1.1抽象类的定义public String getColor()return color;public void setColor(String color)this.color=color;/抽象方法 public abstr

    5、act double area();public abstract String getType();上述代码定义了两个抽象方法:area()和getType(),所以这个Shape类只能被定义为抽象类。虽然Shape类包含了构造方法和初始化块,但不能直接通过构造方法创建对象,只有通过其子类实例化。抽象类不能实例化,只能被当成父类来继承。从语义角度上讲,抽象类是从多个具有相同特征的类中抽象出来的一个父类,具有更高层次的抽象,作为其子类的模板,从而避免子类设计的随意性。下述代码定义一个三角形类,该类继承Shape类,并实现其抽象方法,以此示例抽象类的使用。代码如下所示。8.1.2抽象类的使用抽象

    6、类的使用【代码8.2】Triangle.javapackage com;public class Triangle extends Shape private double a;private double b;private double c;public Triangle(String color,double a,double b,double c)super(color);this.a=a;this.b=b;this.c=c;Override public double area()/海伦公式计算三角形面积double p=(a+b+c)/2;double s=Math.sqrt(p*

    7、(p-a)*(p-b)*(p-c);return s;8.1.2抽象类的使用Override public String getType()if(a=b+c|b=a+c|c=a+b)return 三边不能构成一个三角形;elsereturn 三边能构成一个三角形;public static void main(String args)Triangle t=new Triangle(RED,3,4,5);System.out.println(t.getType();System.out.println(三角形面积为:+t.area();程序运行结果如下:执行抽象类中的初始化块执行抽象类中的构造方

    8、法三边能构成一个三角形三角形面积为:6.08.1.2抽象类的使用 当使用abstract修饰类时,表明这个类只能被继承;当使用abstract修饰方法时,表明这个方法必须由子类提供实现(即重写)。而final修饰的类不能被继承,修饰的方法不能被重写,因此,final与abstract不能同时使用。除此之外,static和abstract也不能同时使用,并且抽象方法不能定义为private访问权限。抽象类体现的就是一种模板模式的设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展、改造,但子类总体上会大致保留抽象类的行为方式。如果编写一个抽象父类,父类提供了多个子类的通用方法,并把一

    9、个或多个方法留给子类实现,这就是一种模板模式,模板模式也是十分常见且简单的设计模式之一。下面再介绍一个模板模式的示例,在这个示例的抽象父类中,父类的普通方法依赖于一个抽象方法,而抽象方法则推迟到子类中提供实现。代码如下所示。8.1.3抽象类的作用抽象类的作用【代码8.3】CarSpeedMeterExample.javapackage com;abstract class SpeedMeter private double turnRate;/转速public SpeedMeter()/返回车轮半径的方法定义为抽象方法public abstract double getRadius();pub

    10、lic void setTurnRate(double turnRate)this.turnRate=turnRate;/定义计算速度的通用方法public double getSpeed()/速度(KM/H)=车轮周长*转速*3.6return Math.round(3.6*Math.PI*2*getRadius()*turnRate);8.1.3抽象类的作用public class CarSpeedMeterExample extends SpeedMeter Overridepublic double getRadius()return 0.30;public static void m

    11、ain(String args)CarSpeedMeterExample csm=new CarSpeedMeterExample();csm.setTurnRate(10);System.out.println(车速为:+csm.getSpeed()+公里/小时);8.1.3抽象类的作用 上面程序定义了一个抽象类SpeedMeter(车速表),该类中定义了一个getSpeed()方法,该方法用于返回当前车速,而getSpeed()方法依赖于getRadius()方法的返回值。对于该抽象类来说,无法确定车轮的半径,因此getRadius()方法必须推迟到子类中来实现。在其子类CarSpeedM

    12、eterExample中,实现了父类的抽象方法,既可以创建实例对象,也可以获得当前车速。程序运行结果如下:车速为:68.0公里/小时 下面是使用模板模式的一些简单规则。(1)抽象父类可以只定义需要使用的某些方法,把不能实现的部分抽象成抽象方法,留给其子类去实现。(2)父类中可能包含需要调用的其他系列方法的方法,这些被调方法既可以由父类实现,也可以由其子类实现。8.1.3抽象类的作用第第2 2节节part接口 接口定义了某一批类所需要遵守的公共行为规范,只规定这批类必须提供的某些方法,而不提供任何实现。接口体现的是规范和实现分离的设计哲学。让规范和实现分离正是接口的好处,让系统的个模块之间面向接

    13、口耦合,是一种松耦合的设计,从而降低各模块之间的耦合,增强系统的可扩展性和可维护性。接 口本节概述8.2.1接口的定义 Java只支持单继承,不支持多重继承,即一个类只能继承一个父类,这一缺陷可以通过接口来弥补。Java允许一个类实现多个接口,这样使程序更加灵活、易扩展。和类定义不同,定义接口不再使用class关键字,而是使用interface关键字。接口定义的基本语法格式如下:【访问符】interface 接口名 /静态常量定义 /抽象方法定义 /默认方法、类方法、内部类等其他定义 接口的定义8.2.1接口的定义 其中,定义接口要遵守如下规则:(1)访问符可以是public或者默认,默认采用

    14、包权限访问控制,即在相同包中才可以访问该接口。(2)在接口体力可以包含静态常量、抽象方法、内部类、内部接口以及枚举类的定义。从Java 8版本开始允许接口中定义默认方法、类方法。(3)与类的默认访问符不同,接口体内定义的常量、方法等都默认为public,可以省略public关键字。(4)接口名应与类名采用相同的命名规范。(5)接口里不能包含构造方法和初始化块。下述代码示例了接口的定义规则,代码如下所示。8.2.1接口的定义【代码8.4】InterfaceDefinition.javapackage com;public interface InterfaceDefinition public

    15、final static int SIZE=0;/定义静态常量public abstract void display();/定义抽象方法/定义默认方法,需要default修饰default void print()System.out.println(接口中的默认方法);/定义静态方法static void show()System.out.println(接口中的类方法);/定义内部类class InnerClass/定义内部接口interface MyInnerInterface 8.2.1接口的定义 上述代码中定义了一个接口InterfaceDefinition,并在接口中声明了静态常

    16、量、抽象方法、默认方法、类方法、内部类和内部接口。其中:(1)接口中定义的成员变量如果没有声明修饰符,系统会自动为其增加“public static final”进行修饰,即接口中定义的成员变量都是静态常量。(2)接口中定义的方法只能是抽象方法、默认方法和类方法。因此,如果是定义普通方法没有声明修饰符,系统将自动增加“public abstract”进行修饰,即接口中定义的普通方法都是抽象方法,不能有方法体。(3)从Java 8开始,允许在接口中定义默认方法,默认方法必须使用“default”关键字修饰,不能使用“static”关键字修饰。因此,不能直接使用接口来调用默认方法,必须通过接口的实

    17、现类的实例对象来调用默认方法,默认方法必须有方法体。(4)从Java 8开始,允许在接口中定义类方法,类方法必须使用“static”关键字修饰,不能使用“default”关键字修饰,类方法必须有方法体,可以直接通过接口来调用类方法。(5)接口中定义的内部类、内部接口以及内部枚举都默认为“public static”。8.2.2接口的实现 接口不能用于创建实例,但接口可以用于声明引用类型变量。当使用接口来声明引用类型变量时,这个引用类型变量必须引用到其实现类的对象。除此之外,接口的主要用途就是被实现类实现。一个类可以实现一个或多个接口,实现则使用implements关键字。由于一个类可以实现多个

    18、接口,这也是为Java单继承灵活性不足所做的补充。类实现接口的语法格式如下:【访问符】【修饰符】class 类名 implements 接口名1,接口名2 /类体部分 接口的实现8.2.2接口的实现 其中:(1)访问符、修饰符、class和类名与前面类的声明格式完全相同。(2)implements关键字用于实现接口。(3)一个类可以实现多个接口,接口之间使用逗号隔开。(4)一个类在实现一个或多个接口时,必须全部实现这些接口中定义的所有抽象方法,否则该类必须定义为抽象类。(5)一个类实现某个接口时,该类将会获得接口中定义的常量和方法等。下述代码示例了对前面声明接口的实现,代码如下所示。8.2.2

    19、接口的实现【代码8.5】MyInterface.javapackage com;public class MyInterface implements InterfaceDefinition/实现接口中定义的抽象方法public void display()System.out.println(重写接口中的抽象方法);public static void main(String args)/实例化一个接口实现类的对象,并将其赋值给一个接口引用变量InterfaceDefinition myInterface=new MyInterface();/调用接口中的默认方法myInterface.pr

    20、int();/访问接口中的静态常量System.out.println(InterfaceDefinition.SIZE);/调用实现类中的方法(对接口中抽象方法的实现)myInterface.display();/调用接口中的类方法InterfaceDefinition.show();8.2.2接口的实现 与抽象类一样,接口是一种更加抽象的类结构,因此不能对接口直接实例化,但可以声明接口变量,并用接口变量指向当前接口实现类的实例。使用接口变量指向该接口实现类的实例对象,这也是多态性的一种体现。程序运行结果如下:接口中的默认方法 0 重写接口中的抽象方法 接口中的类方法8.2.3接口的继承 接

    21、口的继承与类的继承不一样,接口完全支持多重继承,即一个接口可以有多个父接口。除此之外,接口的继承与类的继承相似,当一个接口继承父接口时,该接口将获得父接口中国定义的所有方法和常量。一个接口可以继承多个接口时,多个接口跟在extends关键字之后,并用逗号隔开,接口继承语法格式如下:【访问符】interface 子接口名 extends 父接口名1,父接口名2 /子接口新增的常量和方法 下述代码示例了接口的继承和实现,代码如下所示。接口的继承8.2.3接口的继承【代码8.6】InterfaceExtends.javapackage com;interface MyInterfaceA int A

    22、=10;void showA();interface MyInterfaceB int B=20;void showB();interface MyInterfaceC extends MyInterfaceA,MyInterfaceB int C=30;void showC();8.2.3接口的继承public class InterfaceExtends implements MyInterfaceC public void showA()System.out.println(实现showA()方法);public void showB()System.out.println(实现show

    23、B()方法);public void showC()System.out.println(实现showC()方法);public static void main(String args)MyInterfaceC mc=new InterfaceExtends();/通过接口名直接访问接口中的静态常量System.out.println(A=+MyInterfaceC.A+,B=+MyInterfaceC.B+,C=+MyInterfaceC.C);/调用接口中的方法mc.showA();mc.showB();mc.showC();8.2.3接口的继承 上述代码中,分别定义了MyInterfa

    24、ceA、MyInterfaceB和MyInterfaceC三个接口,其中MyInterfaceC接口继承了MyInterfaceA接口和MyInterfaceB接口,因此MyInterfaceC接口获得了MyInterfaceA接口和MyInterfaceB接口定义的常量和抽象方法。在InterfaceExtends类中实现了MyInterfaceC接口,就需要将三个接口中的抽象方法进行全部实现。程序运行结果如下:A=10,B=20,C=30 实现showA()方法 实现showB()方法 实现showC()方法8.2.3接口的继承 接口和抽象类有很多相似之处,都具有如下特征:(1)接口和抽象

    25、类都不能被实例化,都需要被其他类实现或继承。(2)接口和抽象类的引用变量都可以指向其实现类或子类的实例对象。(3)接口和抽象类都可以包含抽象方法,实现接口和继承抽象类时都必须实现这些抽象方法。8.2.3接口的继承 但接口与抽象类之间也存在区别,主要体现在以下几点:(1)接口体现的是一种规范,这种规范类似于总纲,是系统各模块应该遵循的标准,以便各模块之间实现耦合以及通信功能;抽象类体现的是一种模板式设计,抽象类可以被当成系统实现过程中的中间产品,该产品已实现了部分功能但不能当成最终产品,必须进一步完善,而完善可能有几种不同的方式。(2)接口中除了默认方法和类方法,不能为普通方法提供方法实现,而抽

    26、象类可以为普通方法提供方法实现。(3)接口中定义的变量默认为public static final,且必须赋值,其实现类中不能重新定义,也不能改变其值,即接口中定义的变量都是最终的静态常量;而抽象类中定义的变量与普通类一样,默认为友好的,其实现类可以重新定义也可以根据需要改变值。(4)接口中定义的方法都默认为public,而抽象类则与普通类一样,默认为友好的。(5)接口不包含构造方法,而抽象类可以包含构造方法。抽象类的构造方法不是用于创建对象,而是让其子类调用以便完成初始化操作。(6)一个类最多只能有一个直接父类,包括抽象类;但一个类可以直接实现多个接口,一个接口也可以有多个父接口。第第3 3

    27、节节part枚举 在开发过程中,经常遇到一个类的实例对象是有限而且固定的情况,例如季节类,只有春、夏、秋、冬四个实例对象,月份类只有12个实例对象。这种类的实例对象有限而且固定的,在Java中被称为枚举类。早期使用简单的静态常量来表示枚举,但存在不安全因素,因此,从JDK 5开始新增了对枚举类的支持。定义枚举类使用enum关键字,该关键字的地位与class、interface相同。枚举类是一种特殊的类,与普通类有如下区别:枚举类可以实现一个或多个接口,使用enum定义的枚举类默认继承了java.lang.Eunm类,而不是继承Object类,因此枚举类不能显示继承其他父类。使用enum定义非抽

    28、象的枚举类时默认会使用final修饰,因此枚举类不能派生子类。枚举类的构造方法只能使用private访问修饰符,如果省略,则默认使用private修饰;如果强制指定访问修饰符,则只能指定为private。枚举类的所有实例必须在枚举类的类体第一行显式列出,否则该枚举永远不能产生实例。列出的枚举实例默认使用public static final进行修饰。枚 举本节概述8.3.1枚举类的定义 使用enum关键字来定义一个枚举类,语法格式如下:修饰符 enum 枚举类名 /第一行列举枚举实例 .下述代码定义一个季节枚举类,该枚举类中有4个枚举实例:春、夏、秋、冬。代码如下所示。【代码8.7】Seaso

    29、nEnum.java package com;public enum SeasonEnum /在第一行列出4个枚举实例:春、夏、秋、冬 SPRING,SUMMER,FALL,WINTER;枚举类的定义8.3.1枚举类的定义 上述代码中SPRING、SUMMER、FALL、WINTER被称为枚举实例,其类型就是声明的SeasonEnum枚举类型,其默认使用public static final进行修饰。枚举实例之间使用英文格式逗号“,”隔开,枚举值列举之后使用英文格式分号“;”结束。枚举一旦被定义,就可以直接使用该类型的枚举实例,枚举实例的声明和使用方式类似于基本类型,但不能使用new关键字实例

    30、化一个枚举。所有枚举类型都会包括两个预定义方法:values()和ValueOf(),其功能描述如表8-1所示。8.3.1枚举类的定义使用枚举类的某个实例的语法格式如下:枚举类.实例下述案例示例了如何对SeasonEnum枚举类进行使用,代码如下所示。【代码8.8】SeasonEnumExample.javapackage com;public class SeasonEnumExample public static void main(String args)System.out.println(SeasonEnum枚举类的所有实例值:);/枚举类默认有一个values方法,返回该枚举类的

    31、所有实例值for(SeasonEnum s:SeasonEnum.values()System.out.print(s+);System.out.println();/定义一个枚举类对象,并直接赋值SeasonEnum season=SeasonEnum.WINTER;8.3.1枚举类的定义/使用switch语句判断枚举值switch(season)case SPRING:System.out.println(春暖花开,正好踏青);break;case SUMMER:System.out.println(夏日炎炎,适合游泳);break;case FALL:System.out.println

    32、(秋高气爽,进补及时);break;case WINTER:System.out.println(冬日雪飘,围炉赏雪);break;8.3.1枚举类的定义 对上述代码需要注意三点:调用values()方法可以返回SeasonEnum枚举类的所有实例值;定义一个枚举类型的对象时,不能使用new关键字,而是使用枚举类型的实例值直接赋值;在switch语句中直接使用枚举类型作为表达式进行判断,而case表达式中的值直接使用枚举实例值的名字,前面不能使用枚举类作为限定。程序运行结果如下:SeasonEnum枚举类的所有实例值:SPRING SUMMER FALL WINTER 冬日雪飘,围炉赏雪8.3

    33、.2包 含 属 性 和 方 法 的 枚 举 类 枚举类也是一种类,具有与其他类几乎相同的特性,因此可以定义枚举的属性、方法以及构造方法。但是,枚举类的构造方法只是在构造枚举实例值时被调用。每一个枚举实例都是枚举类的一个对象,因此,创建每个枚举实例时都需要调用该构造方法。下述代码对前面定义的SeasonEnum枚举类进行升级,定义的枚举类中包含属性、构造方法和普通方法,代码如下所示。包含属性和方法的枚举类8.3.2包 含 属 性 和 方 法 的 枚 举 类【代码8.9】SeasonEnum2.javapackage com;/带构造方法的枚举类public enum SeasonEnum2/在第

    34、一行列出4个枚举实例:春、夏、秋、冬SPRING(春),SUMMER(夏),FALL(秋),WINTER(冬);/定义一个属性private String name;/构造方法SeasonEnum2(String name)this.name=name;/方法public String toString()return this.name;8.3.2包 含 属 性 和 方 法 的 枚 举 类 上述代码定义一个名为SeasonEnum2的枚举类型,该枚举类中包含一个name属性;一个带有一个参数的构造方法,用于给name属性赋值;重写toString()方法并返回name属性值。值得注意的是:在

    35、定义枚举类的构造方法时,不能定义public构造方法,枚举类构造方法访问修饰符只能缺省或使用private,缺省时默认为private。使用枚举时要注意两个限制:首先,枚举默认继承java.lang.Enum类,不能继承其他类;其次,枚举本身是final类,不能被继承。下述案例示例了对SeasonEnum2枚举类型的使用,代码如下所示。8.3.2包 含 属 性 和 方 法 的 枚 举 类【代码8.10】SeasonEnum2Example.javapackage com;public class SeasonEnum2Example public static void main(String

    36、 args)System.out.println(SeasonEnum2枚举类的所有实例值:);/枚举类默认有一个values方法,返回该枚举类的所有实例值for(SeasonEnum2 s:SeasonEnum2.values()System.out.print(s+);System.out.println();/使用valueOf()方法获取指定的实例SeasonEnum2 se=SeasonEnum2.valueOf(SUMMER);/输出seSystem.out.println(se);/调用judge()方法judge(se);System.out.println(-);/定义一个枚

    37、举类对象,并直接赋值SeasonEnum2 season=SeasonEnum2.WINTER;/输出seasonSystem.out.println(season);8.3.2包 含 属 性 和 方 法 的 枚 举 类/调用judge()方法judge(season);/判断季节并输出private static void judge(SeasonEnum2 season)/使用switch语句判断枚举值switch(season)case SPRING:System.out.println(春暖花开,正好踏青);break;case SUMMER:System.out.println(夏日

    38、炎炎,适合游泳);break;case FALL:System.out.println(秋高气爽,进补及时);break;case WINTER:System.out.println(冬日雪飘,围炉赏雪);break;8.3.2包 含 属 性 和 方 法 的 枚 举 类 上述代码中,定义一个judge()方法用于判断季节;在main()方法中调用values()方法返回SeasonEnum2枚举类型的所有实例值并输出;调用valueOf()方 法可以获取指定的实例。程序运行结果如下所示:SeasonEnum2枚举类的所有实例值:春 夏 秋 冬 夏 夏日炎炎,适合游泳 -冬 冬日雪飘,围炉赏雪

    39、观察运行结果,可以发现此处输出的SeasonEnum2枚举实例为春、夏、秋、冬,而不是SPRING、SUMMER、FALL、WINTER。这是因为在定义SeasonEnum2枚举类时重写了toString()方法,该方法的返回值为name属性值,当调用System.out.println()方法输出SeasonEnum2枚举对象时,系统会自动调用toString()方法。8.3.3Enum类 所有枚举类都继承自java.lang.Enum,该类定义了枚举类型共用的方法。该类实现了java.lang.Serializable和java.lang.Comparable接口,Enum类常用的方法如表

    40、8-2所示。Enum类 下述案例通过前面定义的枚举类,来示例Enum类中常用方法的适用于,代码如下所示。8.3.3Enum类【代码8.11】EnumMethodExample.javapackage com;public class EnumMethodExample public static void main(String args)System.out.println(SeasonEnum枚举类的所有实例值以及顺序号:);/输出SeasonEnum类的实例值以及顺序号for(SeasonEnum s:SeasonEnum.values()System.out.println(s+-+s

    41、.ordinal();System.out.println(-);/声明4个SeasonEnum对象SeasonEnum s1,s2,s3,s4;/赋值s1=SeasonEnum.SPRING;s2=SeasonEnum.SUMMER;s3=SeasonEnum.FALL;/调用Enum类的静态方法获取指定枚类型、指定值的枚举实例s4=Enum.valueOf(SeasonEnum.class,FALL);/等价于 s4=SeasonEnum.valueOf(FALL);8.3.3Enum类/使用compareTo()进行比较if(pareTo(s2)0)System.out.println(

    42、s1+在+s2+之前);/使用equals()判断if(s3.equals(s4)System.out.println(s3+等于+s4);/使用=判断if(s3=s4)System.out.println(s3+=+s4);System.out.println(-);System.out.println(SeasonEnum2枚举类的所有实例值以及顺序号:);/输出SeasonEnum类的实例值以及顺序号for(SeasonEnum2 s:SeasonEnum2.values()System.out.println(s+-+s.ordinal();System.out.println(-);

    43、8.3.3Enum类/声明4个SeasonEnum对象SeasonEnum2 se1,se2,se3,se4;/赋值se1=SeasonEnum2.SPRING;se2=SeasonEnum2.SUMMER;se3=SeasonEnum2.FALL;/调用Enum类的静态方法获取指定枚类型、指定值的枚举实例se4=Enum.valueOf(SeasonEnum2.class,FALL);/等价于 se4=SeasonEnum2.valueOf(FALL);/使用compareTo()进行比较if(pareTo(se2)0)System.out.println(se1+在+se2+之前);/使用

    44、equals()判断if(se3.equals(se4)System.out.println(se3+等于+se4);/使用=判断if(se3=se4)System.out.println(se3+=+se4);8.3.3Enum类 上述代码中,equals()方法用于比较一个枚举实例值和任何其他对象,但只有这两个对象属性同一个枚举类型且值也相同时,二者才会相等;比较两个枚举引用是否相等时可直接使用“=”。调用Enum类的valueOf()静态方法可以获取指定枚举型、指定值的枚举实例。程序运行结果如下:SeasonEnum枚举类的所有实例值以及顺序号:SPRING-0SUMMER-1FALL-2WINTER-3-SPRING在SUMMER之前FALL等于FALLFALL=FALL-SeasonEnum2枚举类的所有实例值以及顺序号:春-0夏-1秋-2冬-3-春在夏之前秋等于秋秋=秋本章课后作业见教材

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:《Java程序设计教程》课件第八章:抽象类、接口和枚举.pptx
    链接地址:https://www.163wenku.com/p-7669173.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库