java2008ch05泛型和枚举.ppt_第1页
java2008ch05泛型和枚举.ppt_第2页
java2008ch05泛型和枚举.ppt_第3页
java2008ch05泛型和枚举.ppt_第4页
java2008ch05泛型和枚举.ppt_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

Java程序设计 Programming in Java 谷勇浩 北京邮电大学 计算机学院 第 5 章 泛型和枚举 本章总体纲要 泛型 枚举 泛型和枚举 泛型(Generics) 与多态性相似:提高程序代码的复用性 与多态性不同:减少数据的类型转换(p112) 枚举 通过定义枚举常量,在一定程度上增加程序 代码的可读性 泛型定义格式 泛型:通过给类或接口增加类型参数实现,类型参数可以是 任何对象或接口。 类 类修饰词列表 class 类名 extends 父类名 implements 接口名称列表 类体 接口 接口修饰词列表 interface 接口名 extends 接口名称列表 接口体 类型参数的定义格式 类型变量标识符 等价于“类型变量标识符 extends java.lang.Object” 类型变量标识符 extends 父类型 类型变量标识符 extends 父类型1 / 方法mb_sum结束 public static void main(String args ) J_Add b = new J_Add( ); Integer a1 = new Integer(1); Integer a2 = new Integer(2); Integer a3 = new Integer(3); System.out.println( b.mb_sum(a1, a2, a3) ); / 方法main结束 / 类J_Add结束 编译、运行 定义类型为J_Add的变量b,同时创建一 个类型为J_Add的实例对象。 类J_Add的类型变量T所对应的实际类型还可以是其 他类型,只要该类型是类java.lang.Object的子类型, 如类java.lang.Long 示例2 / J_AddInterface.java / 泛型例程 interface J_Interface public int mb_sum(T a1, T a2, T a3); / 接口J_Interface结束 public class J_AddInterface implements J_Interface public int mb_sum(T a1, T a2, T a3) int b1 = Value( ); int b2 = Value( ); int b3 = Value( ); return(b1 + b2 + b3); / 方法mb_sum结束 示例2 public static void main(String args ) J_AddInterface b= new J_AddInterface( ); Integer a1 = new Integer(1); Integer a2 = new Integer(2); Integer a3 = new Integer(3); System.out.println( b.mb_sum(a1, a2, a3) ); / 方法main结束 / 类J_AddInterface结束 编译、运行 指定向量strvector中元素的类型为String Vector intvector=new Vector(); 指定向量intvector中元素的类型为Integer strvector.add(new String(); /OK strvector.add(new Object(); /编译失败,需要String类 strvector.add(new Integer(); /编译失败,需要String类 intvector.add(new Integer(); /OK intvector.add(new String(); /编译失败,需要Integer类 泛型 为什么用泛型 (避免类型转换)如果不使用泛型,就需要定义不同 的多个类,或者通过继承来实现,而通过继承实 现往往引起数据类型的转换问题。 何时用泛型 (部分操作抽象化)在设计集合类和它们的抽象 操作时,往往需要将它们定义为与具体数据类型 无关,在这种情况下,使用泛型就是非常适合的 。 泛型 泛型避免类型转换 J_Test1.java(不用泛型需要类型转换) String s = (String)h.get(new Integer(0);/如果去掉强 制转换符(String)后,出现编译错误 J_Test2.java(采用泛型避免类型转换) 泛型只有在1.5及以上版本才支持。(Eclipse默认设置编 译环境为1.5以下) 泛型 使用泛型使部分操作抽象化 Example5_1.java 计算锥体体积时,不关心它的底是什么类型以及 如何计算面积的。 本章总体纲要 泛型 枚举 枚举的基本定义格式 创建枚举类型的目的:定义一些枚举常量 枚举类型修饰词列表 enum 枚举类型标识符 枚举常量1, 枚举常量2, . ., 枚举常量n 枚举类型修饰词可以是public或者默认值,不能是protected 、private和abstract 若是public,则要求该枚举类型所在的文件名前缀与枚举类型标识符 指定的名称相同,而且该文件中不能含有其他public类、接口或枚举 若是默认属性,则该枚举类型只能在同一个包内使用 示例 enum E_SEASON 春季, 夏季, 秋季, 冬季/定义了四个枚举常量 / 枚举E_SEASON结束 枚举变量 枚举类型变量,简称枚举变量。定义格式有两 种 枚举类型标识符 枚举变量; 枚举类型标识符 枚举变量1,枚举变量2,枚举变量 n; 枚举数组变量的定义 E_SEASON s; 枚举变量 对于枚举类型,不能通过new运算符创建实例 对象 可以通过枚举类型标识符访问枚举常量 E_SEASON s = E_SEASON.春季; /定义了E_SEASON枚举类型变量s 成员方法 public String name() public String toString() /功能:均为返回枚举常量所对应的字符串 ()与E_SEASON.春季.toString()都返回“春季” 成员方法values 该成员方法用来获得该枚举类型的所有枚举常 量,格式为: 枚举类型标识符.values() 通过该方法返回由枚举类型所有枚举常量组成 的枚举数组,例如: E_SEASON sa = E_SEASON.values(); /sa含有四个元素,E_SEASON.春季, E_SEASON. 夏季, E_SEASON.秋季, E_SEASON.冬季 示例 / J_Enum.java / 枚举例程 enum E_SEASON 春季, 夏季, 秋季, 冬季 / 枚举E_SEASON结束 public class J_Enum public static void main(String args ) E_SEASON sa = E_SEASON.values( ); E_SEASON sb = sa0; for (int i=0; i代替J_ADD 替换过程可以减少在直接采用多态性时的数据类型 转换,从而减少因为数据类型转换可能引发的数据 精度丢失等问题。 通过枚举类型定义枚举常量 作业 1. 请应用泛型编写程序。 首先定义一个接口,它至少包含一个可以计算面

温馨提示

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

评论

0/150

提交评论