资源简介 课 堂 教 学 计 划 表课程名称 Java程序设计 教师姓名 专业班级授课时间 授课地点 学时数 16授课题目 § 4 面向对象高级特性教学目标及要求 知识目标 理解类的继承与多态性的概念;掌握简单的类的继承与多态性的概念设计与实现方法;技能目标 能够应用继承和多态性编写简单应用程序;掌握this和super关键字;教学重点 子类的创建方式;继承的基本规则;教学难点 在子类构造方法中对父类构造方法的调用;面对实际问题如何设计对应的类层次结构;项目描述 项目1:在动物园中,游客们在和动物高兴地玩,可爱的小动物非常高兴,请对此场景进行描述项目2:图书信息管理教学方法 问题导引法:通过给学生提出实际编程中出现的问题来引入教学内容,使学生在主动分析、讨论和解决问题的过程中掌握所学知识;案例分析法:通过演示典型案例来讲解相关知识和技术的具体使用过程,使学生在具体的应用环境中加深对概念的理解;任务驱动法:通过完成项目中的各个任务逐步增强实战技能;教学过程设计 新课导入与项目展示首先通过提问、讨论等互动的形式引入课程新知识;然后通过演示本章项目来激发学生的学习兴趣,增强学生学习的积极性、主动性;项目任务分解带领学生分析本章项目并对项目进行任务分解,各项目分解任务如下:项目1:在动物园中,游客们在和动物高兴地玩,可爱的小动物非常高兴,请对此场景进行描述任务1:不同动物的行为表现任务2:利用多态解决游客与动物玩项目2:图书信息管理任务1:不同种类图书的信息任务2:模拟usb接口任务分析根据项目及任务的描述和要求,对项目的各个任务进行分析,然后总结出完成该任务所需要的知识、技能和主要操作步骤;相关知识点针对各个任务分析阶段得到的知识和技能,并结合本章知识和技能目标对相关知识点进行详细讲解和说明;任务实施该阶段以完成各个任务为目的,教师利用相关知识和技能以演示的方式为学生详细讲解每个任务的完整实现过程;同时,该阶段要求学生进行跟随练习,以加深对知识和技能的理解和掌握;技能拓展在保证学生掌握了各个任务所涉及的基本知识和技能的基础上,再通过介绍一定的附加知识并辅导学生完成指定的“技能拓展任务”,最终使学生对所学知识达到举一反三,融会贯通的学习目的;指导与评价对学生的任务实施过程进行指导,并对其中出现的问题进行总结,给出评价;课后作业 完成课后相关习题;课后分析 主要问题:子类对父类方法的重写;教 案 正 文新课导入与项目展示思考:当一个应用程序文件中包含多个类,且这些类中大多数代码都相似时,有没有办法可以消除代码冗余呢?运行各个源程序,为学生演示本章项目各个任务的实现效果。运行结果如下:项目任务分解本章项目可以划分为以下主要任务:项目1:在动物园中,游客们在和动物高兴地玩,可爱的小动物非常高兴,请对此场景进行描述任务1:不同动物的行为表现任务2:利用多态解决游客与动物玩项目2:图书信息管理任务1:不同种类图书的信息任务2:模拟USB接口任务1-1:不同动物的行为表现任务分析动物(Animal)包括Dog、Cat、Goat、Wolf,狗吃骨头、猫吃鱼、山羊吃草、狼吃肉;狗汪汪叫,猫喵喵叫,山羊咩咩叫,狼嗷嗷叫;但是走路的行为walk()一致。通过继承实现以上需求,并编写AnimalTest测试类进行测试。抽取四种动物的共同特性放在父类中,不同特性放在子类中。相关知识点继承Java中使用关键字extends实现继承,其基本语法格式如下:class 子类名extends 父类名{}【实例4-1】Cat继承父类Animal,拥有父类非私有的属性和方法。public class TestAnimal {public static void main(String[] args) {Cat c=new Cat();c.name="嘟嘟";c.eat();}}class Animal{String name;void eat(){System.out.println(name+"正在吃东西");}}class Cat extends Animal{}运行结果为:注意:java只允许单继承,而不允许多重继承,即一个子类只能有一个父类。如果子类继承了父类,则子类自动具有父类的全部非私有的成员。子类可以定义自己的成员,同时也可以修改父类的数据人员或重写父类的方法。Java中允许多层继承。例如:A继承B,B继承C,因此子父类关系是相对的。在java中,Object类是超类或基类,所有类都直接或间接地继承了此类。方法的覆盖当子类继承父类,而子类中中方法与父类中方法的名称、返回值类型及参数完全一致时,只是方法体不一样时,就称子类中的方法覆盖了父类中的方法,也称为方法的覆盖或重写。【实例4-2】public class TestPerson {public static void main(String[] args) {Teacher t=new Teacher();t.name="李老师";Students s=new Students();s.name="张同学";t.personalAbility();s.personalAbility();}}class Person{String name;void personalAbility(){System.out.println(name+"具有个人能力");}}class Teacher extends Person{void personalAbility(){System.out.println(name+"具有教学能力");}}class Students extends Person{void personalAbility(){System.out.println(name+"具有学习能力");}}运行结果为:this和super关键字this代表当前对象public void printNum(){ int number=40; System.out.println(this.number); }此时打印的是实例变量,而非局部变量,即定义在类中而非方法中的变量。 this.number表示实例变量。 谁调用this.number那么谁即为当前(this)对象的number方法。在构造方法中,this表示本类的其他构造方法: student(){}; student(string n){ this();//表示调用student() } 如果调用student(int a)则为this(int a)。 特别注意:用this调用其他构造方法时,this必须为第一条语句,然后才是其他语句。【实例4-3】this用法(程序代码详见教材)super关键字的主要功能是实现了更多的方法调用父类中的方法。有两种用法super表示所在类的父类对象,使用super关键字可以调用父类的属性和方法。子类的构造方法中可以调用父类的构造方法。子类中的无参构造方法默认第一句是调用父类的无参构造方法。使用super调用父类的方法实际上主要是调用被子类覆盖的方法。【实例4-4】super 用法【实例4-5】使用this和super访问类的成员变量(程序代码详见教材)子父类构造方法子类构造方法:类的构造方法名称必须与类名相同,因此,父类构造方法是不能直接被子类继承下来的。而子类通过继承拥有的成员变量实际上是由从父类继承下来的成员变量与新增成员变量组成的。那么,对子类进行初始化应包括对父类成员变量的初始化和对自身成员变量的初始化。而对父类成员变量的初始化通常是通过父类的构造方法进行的,因此,子类构造方法一般包含两部分内容:对父类构造方法的调用和对自身成员变量的初始化。子类继承父类,子类创建时先创建父类。子类构造方法的一般形式如下:子类类名(构造函数参数列表){super(与父类构造函数器方法参数相对的实参);//对子类成员的初始化}首先通过super调用父类中对应的构造方法对从父类继承下来的成员进行初始化,然后再对子类新增成员进行初始化。在子类构造方法中,使用super调用父类构造方法的语句必须为构造方法中的第一条语句当父类中没有构造方法或只有没带参数的构造方法时,系统会为子类构造方法自动加上super语句,可以不显式地添加对父类构造方法的调用;但如果父类中有带参数的构造方法,那么,必须显式地在构造方法中使用super调用父类的带参数的构造方法,否则编译将报错。【实例4-6】轿车与本田的关系(程序代码详见教材)任务实施代码实现【程序文件:TestAnimal.java】(程序代码详见教材)技能拓展子类继承父类,当子类与父类有完全相同的方法名、返回值类型和参数列表,就可以形成方法覆盖。方法的覆盖还应遵循以下规则覆盖方法的访问控制应该与它所覆盖的方法的访问控制相同或更宽松。覆盖方法不能比它所覆盖的方法抛出更多的异常。任务1-2:利用多态解决游客与动物玩任务分析定义父类Animal引用指向子类,覆盖方法,实现多态。相关知识点多态多态的概念:多态是指Java运行时的多态性,是面向对象程序设计中实现代码重用的一种机制。Java实现多态的基础是动态方法调用,即父类某个方法被其子类重写时,可以各自产生自己的功能行为。多态实现的三个条件:有继承关系有方法的覆盖(否则多态没有意义),在面象对象程序设计中,需要利用这种同名方法在执行操作不同的现象提高程序的抽象度和简洁性有父类引用指向子类对象【实例4-7:多态实现】(程序代码详见教材)任务实施代码实现【程序文件:Animal.java】(程序代码详见教材)技能拓展Object类是所有类的父类,根据多态的概念,任何子类的对象都可以赋值给子类的引用。即任何类的实例都可以用Object代替。例如:Object obj=”haha”;Object可以代表所有的对象,这种思想对于通用编程非常有用。例如在Arrays类中有静态方法sort(Object[]obj),在此方法中只要传入任何一种数据类型的数组即可执行。这种通用性可以增加方法的可用范围,例此方法具备了通用性。任务2-1:不同种类图书的信息任务分析有三类图书:科技书、文艺书和教材,这三类图书的定价标准不同,如果图书打折,不同种类图书的折扣也不同。这三类书都属于图书,而且都有显示图书种类、计算图书价格、计算打折这些方法,我们可以通过使用抽象类,定义它们共同的成员变量和方法并作为它们的父类,然后在子类中实现不同的方法。相关知识点抽象类抽象类(Abstract Class)是指使用abstract关键字修饰的类,也就是在声明一个类时加入了abstract关键字。抽象类是一种特殊的类,其它未使用abstract关键字修饰的类一般称作实体类。例如: public abstract class A{public A(){}}抽象方法(Abstract Method)是指使用abstract关键字修饰的方法。抽象方法是一种特殊的方法,其它未使用abstract关键字修饰的方法一般称作实体方法。public abstract void test();【实例4-8:抽象类与抽象方法】(程序代码详见教材)任务实施代码实现【程序文件:Booksell.java】(程序代码详见教材)技能拓展【技能拓展任务】以上任务还可以通过接口来完成。任务2-2:模拟usb接口任务分析计算机主板上的usb接口有严格的规范,移动设备、鼠标和键盘都可以连接到use接口,但三者的操作方式各不相同。移动设备、鼠标和键盘都严格遵守了usb接口的规范,实现了开始、使用和停止三个方法。请编写程序,模拟移动设备、鼠标和键盘使用usb接口,并分别实现usb接口要求的开始(start)、使用(conn)和停止(stop)功能。购买usb鼠标的时候,不管是什么型号,拿来都可以直接使用,原因在于usb接口是统一的,都实现了鼠标的基本功能,是鼠标的一种规范。所有厂商型号都会按照usb接口的鼠标。此规范说明了制造usb类型的鼠标应该做些什么,但并不说明如何做。Usb接口可以使用鼠标、键盘和移动硬盘,完成插入、启动、停止的功能,但插入usb接口的表现不同。Usb接口包含两个抽象方法,但无法实现具体的功能,这些功能在鼠标、键盘或移动硬盘类中实现。相关知识点接口的定义JAVA接口是一系列公开、抽象方法的集合public interface 接口名[extends 接口1,接口2…]{public static final 数据类型 常量名=常量值;public static abstract 返回值 抽象方法名(参数列表); }接口的特征JAVA接口的成员变量默认都是static、final、public类型,必须被显示初始化;JAVA接口的方法成员默认都是public、abstract类型,并且没有方法体,不能被初始化;JAVA接口没有构造方法,接口不能被实例化;JAVA接口不能implements另一个接口;JAVA接口必须通过类去实现它的抽象方法;当类类实现某个JAVA接口时,它必须实现接口中所有的抽象方法,否则这个类必须被声明为抽象类;一个类只有一个父类,但可以实现多个接口。任务实施代码实现【程序文件:MouseInterface.java】【程序文件:USBInterface.java】(程序代码详见教材)技能拓展计算机的USB接口都是集成主板上的,现进一步要求在上面的任务的基础上增加主板类,让主板来完成对USB接口的使用,然后将移动硬盘插入到主板的USB接口中。 展开更多...... 收起↑ 资源预览