面向对象的程序设计第3章 类的层次结构教案Word文件下载.docx
- 文档编号:21671872
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:57
- 大小:33.97KB
面向对象的程序设计第3章 类的层次结构教案Word文件下载.docx
《面向对象的程序设计第3章 类的层次结构教案Word文件下载.docx》由会员分享,可在线阅读,更多相关《面向对象的程序设计第3章 类的层次结构教案Word文件下载.docx(57页珍藏版)》请在冰豆网上搜索。
教学重点:
is-a和继承的概念
父类的数据成员也可以被子类继承。
教学难点:
教学基本内容
方法及手段
一、教学要点:
1.类的继承
(1)is-a关系
概念引入法:
从类型的通用性展开,有一般化的类型可以延伸出特殊的类型。
提示学生思考学生类型和女学生类型的关系。
定论为:
女学生都是学生,但学生不都是女学生。
引导学生继续举例思考:
例如
蛇是爬行动物,爬行动物不是蛇等。
引出概念:
女学生都是学生。
女学生和学生都是类型。
面向对象的思维方式更贴合人类认识问题的本质。
继承体现了这种“isa”的关系,所以继承这种概念在面向对象语言中出现。
通过extends关键字在定义类的时候使用。
案例3-1:
classStudent{
intage;
StringstudentNo;
Stringname;
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
voidsetAge(intage){
this.age=age;
intgetAge(){
returnage;
voidsetStudentNo(StringstudentNo){
this.studentNo=studentNo;
StringgetStudentNo(){
returnthis.studentNo;
}
classGirlStudentextendsStudent{
publicclassTest{
publicstaticvoidmain(String[]args){
GirlStudentstu1=newGirlStudent();
stu1.setStudentNo("
163001040403"
);
stu1.setAge(18);
stu1.setName("
舒翠芳"
System.out.println(stu1.getName());
}
引例分析:
首先创建Student的对象,进行方法调用。
然后将Student改成GirlStudent,会发现所有Student提供的功能,GirlStudent全都具备。
也即是,通过extends关键字,就可以完全“继承”父类的功能。
练习:
补全Student的其他属性:
class、sex。
添加相应get、set方法,在main中测试,让学生增强印象:
父类中新增的方法,子类因为继承,全部都自动“具备”。
子类需要增加特性,体现父类和子类,从一般到特殊,从抽象到具体。
那么增加的特性,例如女学生的特点如何在子类型中体现呢?
例如:
增加一个形体课程分数。
intshapeCourseGrade;
voidsetShapeCourseGrade(intgrade){
this.shapeCourseGrade=grade;
intgetShapeCourseGrade(){
returnthis.shapeCourseGrade;
voidoutput2(){
继续测试。
可以看到女学生类型功能要多于学生类型功能。
stu1.setSex("
女"
stu1.setShapeCourseGrade(90);
System.out.println(stu1.getName()+"
"
+stu1.getShapeCourseGrade());
(2)父类的数据成员也可以被子类继承。
publicStringgetSex(){
returnsex;
publicvoidsetSex(Stringsex){
this.sex=sex;
publicStringgetMajor(){
returnmajor;
publicvoidsetMajor(Stringmajor){
this.major=major;
Stringsex;
Stringmajor;
voidoutput(){
System.out.println("
学生的基本信息为:
学号"
+studentNo+"
姓名"
+name+"
性别"
+sex);
//要求学生补全此处语句,完成输出学生基本信息以及形体课程分数的功能。
stu1.output2();
练习
classLocation{
intx,y;
voidshow(){
System.out.println(this.x+"
+this.y);
classPoint123extendsLocation{
booleanvisible;
Point123(intx,inty,booleantf){
this.x=x;
this.y=y;
this.visible=tf;
voidmoveTo(intx,inty){
publicclassone{
Point123p=newPoint123(100,100,false);
p.show();
运行结果为:
100,100
子类操作了继承的父类属性x、y。
在Point123中增加一个方法,该方法可以将原来x和y的值分别扩大为设置后倍数值。
例如原来点坐标为(5,10),扩大10倍后,坐标值为(50,100);
voidexpand(inttimes){
}
概念引入法
案例
引例分析
案例扩展法
练习强化
课后小结:
本节由抽象到具体、一般到特殊等认识问题的规律引入主题。
让学生明白面向对象的语言更贴近人类认识问题的本质和规律。
Java语言提供了继承这一语法来实现这种“规律”。
通过继承,代码得到复用。
一个实例层层深入,步步验证,讲述中穿插代码演示,代码演示后紧跟学生训练。
整个过程无缝连接,学生学习效果较好。
2017年10月12日第3-4节
理解super与派生类对象的构造
Super在构造方法中的使用;
理解派生类对象的构造方法应用
一、教学要点
1.super与派生类对象的构造
复习:
类的构造方法
classValue1{
intx,y;
Value1(intx,inty){
System.out.println("
我是从Value1的构造方法输出的"
Value1(){
我是从Value1的无参构造方法输出的"
intgetX(){
returnx;
voidsetX(intx){
this.x=x;
intgetY(){
returny;
voidsetY(inty){
this.y=y;
Value1v1=newValue1(10,20);
intsum=v1.getX()+v1.getY();
System.out.println(sum);
Value1v1=newValue1();
子类的构造方法:
classValue2extendsValue1{
intz;
intgetZ(){
returnz;
Value2(intx1,inty1){
this.x=x;
//super(x1,y1);
我是从Value2的构造方法输出的"
Value2(){
Value2(intx1,inty1){
super(x1,y1);
Value2v1=newValue2(10,20);
Value2v1=newValue2();
其中,子类构造方法完成的功能和父类构造方法完成功能一致,所以应该激发学生思考:
该构造方法是对x、y进行初始化。
而x、y是父类的数据,父类的构造方法完成的功能和子类是一样的,能不能调用呢?
调用需要用到super关键字。
是否可以直接调用父类的构造方法?
改成:
super(x1,y1);
完整:
classValue2extendsValue1{
Value2(intx1,inty1){
此处需要详细讲述整个实参传递形参以及方法调用的全过程。
2.父类构造方法的调用是不是总是存在的?
intt;
Value2v2=newValue2(10,20);
t=v2.getX()+v2.getY();
System.out.print("
add="
+t);
classValue1{
publicintgetX(){
publicvoidsetX(intx){
publicintgetY(){
publicvoidsetY(inty){
Value1(intx,inty){
Value1(){
分析:
1.去掉super(x1,y1);
语句
结果输出为0,调用了无参构造方法
2.加上此句,结果输出为30.调用了有参构造方法
修改错误
说明父类必须存在这个带参数的构造方法,子类才能调用
练习2:
只能修改Value2,Value1和Test类都不能改动。
使得输出结果为60。
Value2v2=newValue2(10,20,30);
t=v2.getX()+v2.getY()+v2.getZ();
publicintgetZ(){
publicvoidsetZ(intz){
this.z=z;
要求:
子类需要存在这个带3个参数的构造方法,才能完成对x、y、z赋值,请完成这个构造方法。
解法1:
Value2(intx1,inty1,intz1){
this.z=z1;
解法2:
this.x=x1;
this.y=y1;
本节开始学习时,部分学生对于类的构造方法已经遗忘,通过教师的引导,通过近20分钟完成了对于前面构造方法的复习和练习。
学生对于继承已经有了概念,但对于父类和子类具体到某个实例如何区分,还需要详细地通过案例进行说明。
在父类的构造方法学生已经完成掌握了2个以上重载构造方法编写后。
在写父类的构造方法时,学生已经能够举一反三完成。
此时应强调子类的构造方法如果是对于继承过来的数据成员初始化,需要了解继承的数据成员和子类独有数据成员之间的区别。
以此进一步了解super用于父类构造方法的调用,新增的成员需要初始化的语句应同样在子类构造方法中编写。
且要位于super调用之后。
另外要说明子类构造方法的第一句默认为super();
强化学生理解:
无论怎样,子类构造方法都会去调用父类的构造方法。
2017年10月13日第3-4节
1.继承中的方法覆盖
子类继承父类,如果需要改写父类的某个功能(方法),只用在子类的定义中重写该方法即可。
inti;
DerivedClassd=newDerivedClass("
Tom!
"
System.out.println(d.GetName());
classBaseClass{
privateStringhostName;
BaseClass(Strings){
hostName=s;
publicStringGetName(){
returnhostName;
classDerivedClassextendsBaseClass{
DerivedClass(Strings){
super(s);
return"
我永远叫小明"
;
输出结果为:
我永远叫小明
注意:
第一次用BaseClass的对象,来测试GetName方法。
第二次用子类对象去测试。
让学生看到区别。
2.super的其他用法
提问:
子类在设计功能的时候,可以使用继承的数据,能否使用继承的方法呢?
Name:
+super.GetName();
public
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向对象的程序设计第3章 类的层次结构教案 面向 对象 程序设计 层次 结构 教案