Java程序设计-8-范型、枚举和内部类.ppt
《Java程序设计-8-范型、枚举和内部类.ppt》由会员分享,可在线阅读,更多相关《Java程序设计-8-范型、枚举和内部类.ppt(22页珍藏版)》请在三一文库上搜索。
1、Java程序设计,第八章 泛型、枚举和内部类,学习目标,理解泛型的作用,掌握泛型类的声明及实例化的方法 掌握枚举类的定义和使用 掌握内部类的定义和使用方法 掌握匿名类的使用方法,8.1泛型,什么是泛型 泛型也被称为参数化类型(parameterized type),就是在定义类、接口和方法时,规定了创建将要处理的对象类型。 声明泛型类 要求,一个实现先进先出的循环队列。 怎么实现这样的数据结构? 要处理的队列元素类型是什么?,实现策略一:非泛型的方法,/程序8-1:一个实现了先进先出的循环队列 public class Pool private Object objArray; /记录当前数组
2、中第一个元素出现的位置 private int headLoc /记录当前数组中最后一次插入元素位置 private int tailLoc; public Pool(int length) objArray=new Objectlength; headLoc=-1;/默认在第一个元素之前 tailLoc=-1;/默认在第一个元素之前 ,/从数组中取得一个元素,如果没有返回null public Object get() Object result=null; int idx=(headLoc+1)%objArray.length;/指针后移一位 if(objArrayidx!=null) r
3、esult=objArrayidx; objArrayidx=null; headLoc+;/更新队列头的位置 return result; ,实现策略二:泛型的方法,/*程序8-2:一个利用泛型实现了先进先出的循环队列, T是未知类型*/ public class GenericPool private Object objArray; private int headLoc;/记录第一个元素出现的位置 private int tailLoc;/记录最后一次插入元素位置 public GenericPool(int length) objArray=new Object10; headLoc
4、=-1;/默认在第一个元素之前 tailLoc=-1;/默认在第一个元素之前 ,/*从数组中取得一个元素,如果没有返回null, 方法的返回值类型为T,这里和类的未知参数一致*/ public T get() Object result=null; int idx=(headLoc+1)%objArray.length;/指针后移一位 if(objArrayidx!=null) result=objArrayidx; objArrayidx=null; headLoc+; return (T)result; ,8.1.2声明泛型接口,声明,public interface IPool T ge
5、t(); int add(T t); ,实现,public class GenericPool implements IPool ,public class GenericPool implements IPool ,8.1.3声明泛型方法,泛型方法 除了泛型类和接口外,还可以只单独定义一个方法作为泛型方法,可以指定方法参数或者返回值指定为泛型类型的声明,留待运行时确定 泛型方法就可以声明在泛型类中,也可以声明在普通类中。,public class ArrayTool public static void insert(E e,int idx) /请自己添加代码 public static E
6、 valueAt(E e) /请自己添加代码 ,8.1.4泛型参数的限定,定义泛型参数的上界,public class NumberGenericPool,说明 上述方式的声明规定了NumberGenericPool类所能处理的参数其类型和Number有继承关系 extends关键字所声明的上界既可以是一个类,也可以是一个接口 当泛型参数这样声明时,在实例化一个泛型类时,需要明确类型必须为指定上界类型或者子类。,NumberGenericPool pool= new NumberGenericPool(2);,8.1.4泛型参数的限定,定义参数的下界,List cards=new ArrayL
7、ist();,说明 通过使用super关键字可以固定泛型参数的类型为某种类型或者其超类 当程序希望为一个方法的参数限定类型时,通常可以使用下限通配符,public static void sort(T a, Comparator c),通配符 “?”符号表明参数的类型可以是任何一种类型,他和参数T的含义是有区别的。T表示一种未知类型,而“?”表示任何一种类型。这种通配符一般有以下三种用法: 单独的?,用于表示任何类型。 ? extends type,表示带有上界。 ? super type,表示带有下界。,8.2枚举,如果我们想定义一个成绩类,成绩的范围只能是A、B、C、D、E,接受其它类型的
8、值都是违法的,应该如何定义呢?我们可以定义一个成绩类,但如何表示成绩呢,整型、字符型?似乎都不合适,因为没有明确的类型对应,即使是字符型,那么超出了“A、B、C、D、E“范围的字符程序需要特别处理,以便保证应用安全。Java语言提供了一种称为枚举的类型定义方法.,1 声明枚举类 public enum Grade A, B, C, D, E ; 它包括一个关键字enum,一个新枚举类型的名字 Grade以及为Grade定义的一组值,这里的值既非整型,亦非字符型。,枚举类 枚举类是一个类,它的隐含父类是java.lang.Enum。 枚举值并不是整数或其它类型,是被声明的枚举类的自身实例,例如A
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 程序设计 范型 枚举 部类
链接地址:https://www.31doc.com/p-2201830.html