Java高级编程2环保示范课教案继承和多态.docx
- 文档编号:9997550
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:21
- 大小:58.42KB
Java高级编程2环保示范课教案继承和多态.docx
《Java高级编程2环保示范课教案继承和多态.docx》由会员分享,可在线阅读,更多相关《Java高级编程2环保示范课教案继承和多态.docx(21页珍藏版)》请在冰豆网上搜索。
Java高级编程2环保示范课教案继承和多态
Java高级编程--第二章
示范课教案
●授课章节目录:
面向对象的java实现第二章
继承和多态
●授课时数:
4课时
●目的要求:
掌握继承
掌握super关键字
掌握多态
●教材分析(难点、疑点):
继承是面向对象的一块基石,因为它允许分等级层次的创建类。
利用继承我们可以创建一个通用的类,然后再由更具体的类来继承它,再在这些类里加入自己特定的东西,这样我们会节省很多代码。
下图为员工之间的继承关系:
Java只支持单继承,一个Java类只能有一个父类,使用extends来实现继承,其语法格式为:
[public]class子类名extends父类名{
}
以下列举一个继承案例,让Teacher继承至Employee,那么Teacher是子类、Employee是父类。
/**
*员工类
*@authorcreate
*/
classEmployee{
publicStringname;//姓名
publicStringsex;//性别
publicintage;//年龄
publicStringtell;//联系电话
/**
*自我介绍的方法
*/
publicvoidintroduce(){
System.out.println("我是"+name+",今年"+age+"岁,联系电话是:
"+tell);
}
}
/**
*教师类继承至员工类
*@authorcreate
*/
classTeacherextendsEmployee{
//Teacher类特有的特征
publicStringsubject;
/**
*教师特有的方法--讲课
*/
publicvoidprelect(){
System.out.println(this.name+"老师开始讲解"+this.subject
+"课程!
");
}
}
Super关键字的用法:
子类的构造方法中,通过super关键字调用父类的构造方法。
可以通过以下代码进行Super关键字的验证。
/**
*员工类
*@authorcreate
*/
classEmployee{
//……属性定义
/**
*父类构造方法
*/
publicEmployee(Stringname,Stringsex,intage,Stringtell){
System.out.println("-----Employee(父类)构造方法-----");
this.name=name;
this.sex=sex;
this.age=age;
this.tell=tell;
}
//……方法定义
}
/**
*教师类继承至员工类
*@authorcreate
*/
classTeacherextendsEmployee{
//……属性定义
/**
*子类构造方法
*/
publicTeacher(Stringname,Stringsex,intage,Stringtell,
Stringsubject){
super(name,sex,age,tell);
this.subject=subject;
System.out.println("-----Teacher(子类)构造方法-----");
}
//……方法定义
}
publicclassEmployeeManager{
publicstaticvoidmain(String[]args){
Teachert=newTeacher("张三","男",25,"210-68729823","C语言");
t.prelect();
}}
运行效果如下:
在使用super关键字的时候学要注意:
在子类的构造方法中父类的构造方法是最先调用的,也就是说super要放在子类构造方法的第一行。
在子类的普通方法中还可以使用super调用父类定义的方法或者属性。
多态是指只同一事物有不同的表现形式,比如教师和班主任都是属于员工,都有自我介绍的方法,但是班主任和教师的自我介绍可能是不一样的。
又如教师拥有讲课的方法,但是根据给定工具的不同教师讲课的方式也不相同。
这些都是属于多态的特性。
在Java中多态的表现形式有两种:
一种称为方法重写,一种称为方法重载。
方法重写是指在继承关系中,子类重写父类的方法。
所谓重写是指方法的定义完全相同,包括方法名、返回类型、参数列表都完全一样。
方法重写的案例:
/**
*员工类
*@authorcreate
*/
classEmployee{
publicStringname;//姓名
publicStringsex;//性别
publicintage;//年龄
publicEmployee(Stringname,Stringsex,intage){
this.name=name;
this.sex=sex;
this.age=age;
}
/**
*自我介绍的方法
*/
publicvoidintroduce(){
System.out.println("我是"+name+",今年"+age+"岁!
");
}
}
/**
*教师类继承至员工类
*@authorcreate
*/
classTeacherextendsEmployee{
publicStringsubject;
publicTeacher(Stringname,Stringsex,intage,Stringsub){
super(name,sex,age);
this.subject=sub;
}
/**
*重写父类的自我介绍方法
*/
publicvoidintroduce(){
System.out.println("我是一名教师,我叫:
"+name
+",我的技术方向是:
"+this.subject+",今年"+age+"岁!
");
}
}
方法重载是指在同一个类中拥有两个或者两个一样的方法,方法名相同、参数列表不同。
比如教师的讲课方法,根据给定的工具可以由不同的讲课方式。
classTeacher{
publicStringname;
publicStringsubject;
publicTeacher(Stringname,Stringsubject){
this.name=name;
this.subject=subject;
}
/**
*没有工具的讲课方法
*/
publicvoidprelect(){
System.out.println("教师"+this.name+"走上讲台开始咆哮!
");
}
/**
*具有工具的讲课方法
*@paramtool工具
*/
publicvoidprelect(Stringtool){
System.out.println("教师"+this.name+"开始使用"+tool
+"讲解"+this.subject+"课!
");
}
}
●教学方法与手段特色:
1、讲课内容能够重点突出,讲透难点,循序渐进,主次分明。
2、通过案例分析讲述本章节各个知识点。
3、通过提问引导的方式讲解程序的分析和解决思路。
4、通过现场案例纠错的方法加深学生对知识点的理解。
5、通过现场调试项目的方式加深学生对代码的运行过程。
●布置作业:
一、选择题
1、(C)术语常常用来指代父类。
A.ParentB.Child
C.SupperClassD.无固定术语
2、关键字(B)用来调用父类构造方法。
A.ParentB.super
C.extendsD.this
3、在Java中,当在类中定义两个或多个方法,它们有相同的名称而参数项不同时,这种成为(A)。
A.方法重写B.方法重载
C.多态D.继承
4、下列选项中,不是java语言关键字的是(C)。
A.importB.extends
C.mallocD.new
5、对继承的说法错误的是(c)。
A.继承有助于代码重用。
B.在java中,使用关键字extends来继承。
C.对于猫和花猫来说:
花猫是父类,猫是子类。
D.父类也可称为基类或超类。
6、下面代码的输出结果是(B)。
classA{
publicvoidoutput(){
System.out.println(“Helloworld!
”);
}
}
classBextendsA{
publicvoidfun(){
System.out.println(“sssssss”);
}
}
classTest{
publicstaticvoidmain(String[]s){
Bb=newB();
b.output();
}
}
A.sssssss
B.Helloworld!
C.运行出错,因为B类中没有output()方法
D.Helloworld!
sssssss
二、简答题
1、设计一个能细分为矩形、三角形、圆形和椭圆形的“图形”类。
使用继承将这些图形分类,找出能作为基类部分的共同特征(如校准点)和方法(如画法、初始化),并看看这些图形是否能进一步划分为子类。
package_23唐尹勇;
publicclassGraphical{
privateStringname;//名字
publicStringCaliPoint;//校准点
publicGraphical(Stringname,StringCaliPoint){
this.name=name;
this.CaliPoint=CaliPoint;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicStringgetCaliPoint(){
returnCaliPoint;
}
publicvoidsetCaliPoint(StringcaliPoint){
CaliPoint=caliPoint;
}
publicvoidDraw(){
System.out.println("使用作图工具绘画。
");
}
}
classRectangularextendsGraphical{
privateintwidth;//宽
privateintheight;//高
publicintgetWidth(){
returnwidth;
}
publicvoidsetWidth(intwidth){
this.width=width;
}
publicintgetHeight(){
returnheight;
}
publicvoidsetHeight(intheight){
this.height=height;
}
publicRectangular(Stringname,StringCaliPoint,intwidth,intheight){
super(name,CaliPoint);
this.width=width;
this.height=height;
}
publicvoidDrawing(){
super.Draw();
System.out.println("先画长"+width+"米,再画宽"+height+"米,校准点在:
"+CaliPoint);
}
}
classTriangleextendsGraphical{
privateintwhat;
privateintheight;
publicTriangle(Stringname,StringCaliPoint,intwhat,intheight){
super(name,CaliPoint);
this.what=what;
this.height=height;
}
publicintgetWhat(){
returnwhat;
}
publicvoidsetWhat(intwhat){
this.what=what;
}
publicintgetHeight(){
returnheight;
}
publicvoidsetHeight(intheight){
this.height=height;
}
publicvoidDrawing(){
super.Draw();
System.err.println("先画底"+what+"米,在画高"+height+"米,再画两边。
校准点在:
"+CaliPoint);
}
}
classRoundextendsGraphical{
privateintr;
publicRound(Stringname,StringCaliPoint,intr){
super(name,CaliPoint);
this.r=r;
}
publicintgetR(){
returnr;
}
publicvoidsetR(intr){
this.r=r;
}
publicvoidDrawing(){
super.Draw();
System.out.println("用圆规以一点为圆心,半径为:
"+r+".校准点在:
"+CaliPoint);
}
}
classEllipseextendsGraphical{
privateintlongAxis;
privateintShortAxis;
publicEllipse(Stringname,StringCaliPoint,intlongAxis,intShortAxis){
super(name,CaliPoint);
this.longAxis=longAxis;
this.ShortAxis=ShortAxis;
}
publicintgetLongAxis(){
returnlongAxis;
}
publicvoidsetLongAxis(intlongAxis){
this.longAxis=longAxis;
}
publicintgetShortAxis(){
returnShortAxis;
}
publicvoidsetShortAxis(intshortAxis){
ShortAxis=shortAxis;
}
publicvoidDrawing(){
super.Draw();
System.out.println("椭圆的长轴为:
"+longAxis+",短轴为:
"+ShortAxis+"。
校准点在:
"+CaliPoint);
}
}
package_33杨畅;
publicclassGraphicalTest{
publicstaticvoidmain(String[]args){
Rectangularrectangular=newRectangular("矩形","中心",10,20);
rectangular.Drawing();
Triangletriangle=newTriangle("三角形","中心",12,10);
triangle.Drawing();
Roundround=newRound("圆","圆心",14);
round.Drawing();
Ellipseellipse=newEllipse("椭圆","焦点",22,23);
ellipse.Drawing();
}
}
2、创建一个名为Employee的类。
它存储姓和名。
此信息对于所有员工(包括派生类)是公共的。
现在,从类employee派生类hourlyworker(小时工)、pieceworker(计件工)、boss(老板)、commissionworker(佣金工)。
小时工按小时支付工资,对于每周超过40小时的加班时间,按照附加50%支付。
按生产的每件产品给计件工支付固定工资。
假定该工人仅制造一种产品。
老板每周得到固定的工资。
佣金工每周得到少许的固定保底工资,加上该工人在一周内总销售的固定百分比。
每个类应该有一个构造方法、析构函数和一个名为print()的用于显示数据的函数。
package_23唐尹勇;
importjava.util.jar.Attributes.Name;
publicclassEmployee{
privateStringname;
privatedoubleWage;
publicEmployee(Stringname){
this.name=name;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicdoublegetWage(){
returnWage;
}
publicvoidsetWage(doublewage){
Wage=wage;
}
publicvoidprint(){
System.out.println(name+"本月工资结账:
");
}
}
classhourlyworkerextendsEmployee{
privateinteryTime;
privateinttime;
publichourlyworker(Stringname,interyTime,inttime){
super(name);
this.time=time;
this.eryTime=eryTime;
}
publicintgetEryTime(){
returneryTime;
}
publicvoidsetEryTime(interyTime){
this.eryTime=eryTime;
}
publicintgetTime(){
returntime;
}
publicvoidsetTime(inttime){
this.time=time;
}
publicvoidprinting(){
super.print();
if(time>40){
super.setWage(eryTime*time*1.5);
}else{
super.setWage(eryTime*time);
}
System.err.println(getName()+"本月总共工作了"+time+"个小时,本月工资为:
"+getWage()+"元。
");
}
}
classpieceworkerextendsEmployee{
privateintNumber;
privateinteryNumber;
publicpieceworker(Stringname,intNumber,interyNumber){
super(name);
this.eryNumber=eryNumber;
this.Number=Number;
//TODOAuto-generatedconstructorstub
}
publicintgetNumber(){
returnNumber;
}
publicvoidsetNumber(intnumber){
Number=number;
}
publicintgetEryNumber(){
returneryNumber;
}
publicvoidsetEryNumber(interyNumber){
this.eryNumber=eryNumber;
}
publicvoidprinting(){
super.print();
super.setWage(Number*eryNumber);
System.err.println("本月共生产了"+Number+"件产品,总工资为:
"+super.getWage());
}
}
classbossextendsEmployee{
publicboss(Stringname,Doublewage){
super(name);
super.setWage(wage);
}
publicvoidprinting(){
super.print();
System.out.println("本月工资为:
"+super.getWage());
}
}
classcommissionworkerextendsEmployee{
privateintmoney;//固定工资
privateintTotalSales;//总销售
publicintgetMoney(){
returnmoney;
}
publicvoidsetMoney(intmoney){
this.money=money;
}
publ
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 高级 编程 环保 示范 教案 继承