PAGE5
《面向对象程序设计》教案
第18讲
教学对象
计算机科学技术专业
授课内容
6.8抽象类
6.9对象转换
6.10理解多态性
课程标准
教学目标
(一)知识目标
1.掌握抽象类的使用
2.理解抽象类的概念
3.掌握对象转换的使用
4.理解多态的概念
(二)能力目标
1.能够应用类、对象、封装、继承、多态等知识编写应用程序
2.能够掌握面向对象理论与方法,进行创新性的编程设计
教学方法
采用讲授法、演示法、讨论法、案例教学。
学时及分配(第1学时50分钟)
课堂讲授30分钟
课堂练习20分钟
6.8抽象类
学时及分配(第2学时50分钟)
课堂讲授30分钟
课堂练习20分钟
6.9对象转换
6.10理解多态性
知识点分析
重点:
抽象类的使用、对象转换与多态性
难点:
对象转换与多态性
教学过程设计
内容
方式
问题导入
假设要开发一个图形绘制系统,需要定义圆(Circle)类、矩形(Rectangle)类和三角形(Triangle)类等,这些类都需要定义求周长和面积的方法,这些方法对不同的图形有不同的实现。这时就可以设计一个更一般的类,比如几何形状(Shape)类,在该类中定义求周长和面积的方法。由于Shape不是一个具体的形状,这些方法就不能实现,因此要定义为抽象方法(abstractmethod)。
内容要点
6.8抽象类
定义抽象方法需要在方法前加上abstract修饰符。抽象方法只有方法的声明,没有方法的实现。包含抽象方法的类必须定义为抽象类,定义抽象类需要的类前加上abstract修饰符。
下面定义的Shape类即为抽象类,其中定义了两个抽象方法。
【程序6-11】Shape.java
packagecom.boda.xy;
publicabstractclassShape{
Stringname;
抽象类可以定义构造方法publicShape(){}
抽象类可以定义构造方法
publicShape(Stringname){
=name;
}
两个抽象方法publicabstractdoublegetArea();
两个抽象方法
publicabstractdoublegetPerimeter();
}
在抽象类中可以定义构造方法,这些构造方法可以在子类的构造方法中调用。尽管在抽象类中可以定义构造方法,但抽象类不能被实例化,即不能用new生成抽象类的对象,如下列语句将会产生编译错误:
Shapesh=newShape();
在抽象类中可以定义非抽象的方法。可以创建抽象类的子类,抽象类的子类还可以是抽象类。只有非抽象的子类才能使用new创建该类的对象。抽象类中可以没有抽象方法,但仍然需要被子类继承,才能实例化。
下面程序的Circle类继承了Shape类并实现了getArea()和getPerimeter()两个抽象方法。
【程序6-12】Circle.java
packagecom.boda.xy;
publicclassCircleextendsShape{
privatedoubleradius;
publicCircle(){
this(0.0);
}
publicCircle(doubleradius){
super(圆);//调用父类的构造方法
this.radius=radius;
}
publicvoidsetRadius(doubleradius){
this.radius=radius;
}
publicdoublegetRadius(){
returnradius;
}
实现父类的抽象方法@Override
实现父类的抽象方法
publicdoublegetPerimeter(){
return2*Math.PI*radius;
}
实现父类的抽象方法@Override
实现父类的抽象方法
publicdoublegetArea(){
returnMath.PI