PAGE5
《面向对象程序设计》教案
第25讲
教学对象
计算机科学技术专业
授课内容
10.1泛型
10.2集合框架
10.3List接口及实现类
课程标准
教学目标
(一)知识目标
1.了解泛型的概念
2.掌握泛型的定义和使用
3.了解集合框架
4.掌握List接口及实现类
(二)能力目标
1.能够学会泛型类的定义和使用
2.熟练掌握ArrayList的基本操作,能够熟练使用List集合解决问题
教学方法
采用讲授法、演示法、讨论法、案例教学。
学时及分配(第1学时50分钟)
课堂讲授30分钟
课堂练习20分钟
10.1泛型
10.2集合框架
学时及分配(第2学时50分钟)
课堂讲授20分钟
课堂练习30分钟
10.3List接口及实现类
知识点分析
重点:
泛型类型的定义和使用
ArrayList的基本操作
难点:
泛型接口及泛型方法
集合的体系结构、迭代器
教学过程设计
内容
方式
问题导入
回顾一下,我们在前边课程中定义了一个整数栈类IntStack,该类使用Integer作为栈的元素,这就限制了该类只能对Integer元素操作。如果要使这个栈类更具有通用性,我们可以使用Object作为栈的元素,因为Object类是所有类的超类,所以Object可以引用任何对象类型。
然而,这种做法无法提供类型的安全性,在进行类型转换时可能发生类型不匹配异常。使用泛型就可以提高类型安全性,因为,它可以使类型转换自动地、隐式地进行。
所谓泛型(generics)就是带一个或多个类型参数(typeparameter)的类或接口。对于上述讨论的对象栈,可以使用泛型定义。
内容要点
10.1.1泛型类
泛型是带一个或多个类型参数的类或接口。
【程序10-1】定义一个泛型Node类表示节点,类型参数T表示节点中存放的值。
Node.java
packagecom.boda.xy;
publicclassNodeT{
privateTdata;//泛型成员
publicNode(){}//默认构造方法
publicNode(Tdata){//带参数构造方法
this.data=data;
}
publicTgetData(){//访问方法定义
returndata;
}
publicvoidsetData(Tdata){//修改方法定义
this.data=data;
}
//显示类型名
publicvoidshowType(){
System.out.println(T的类型是:+data.getClass().getName());
}
}
泛型类型的使用与方法调用类似,方法调用需向方法传递参数,使用泛型需传递一个类型参数,即用某个具体的类型替换T。例如,如果要在Node对象中存放Integer对象,就需要在创建Node对象时为其传递Integer类型参数。要实例化泛型类对象,也使用new运算符,但在类名后面需加上要传递的具体类型。
varintNode=newNodeInteger();
一旦创建了intNode对象,就可以调用setData()方法设置其中的Integer对象,调用getData()方法返回其中的Integer对象,如下代码所示。
【程序10-2】NodeTest.java
packagecom.boda.xy;
publicclassNodeTest{
publicstaticvoidmain(String[]args){
varintNode=newNodeInteger();
不需要强制类型转换intNode.setData(999);
不需要强制类型转换
varvalue=intNode.getData();
System.out.println(value);
intNode.showType();
}
}
按照约定,类型参数名使用单个大写字母表示。常用的类型参数名有:E表示元素,K表示键,N表示数字,T表示类型,V表示值等。
10.1.2泛型接口
还可以定义泛型接口。泛型可能具有多个类型参数,但在类或接口的声明中,每个参数