继承和方法的覆盖

上传人:wt****50 文档编号:49596210 上传时间:2018-07-31 格式:PPT 页数:20 大小:393KB
返回 下载 相关 举报
继承和方法的覆盖_第1页
第1页 / 共20页
继承和方法的覆盖_第2页
第2页 / 共20页
继承和方法的覆盖_第3页
第3页 / 共20页
继承和方法的覆盖_第4页
第4页 / 共20页
继承和方法的覆盖_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《继承和方法的覆盖》由会员分享,可在线阅读,更多相关《继承和方法的覆盖(20页珍藏版)》请在金锄头文库上搜索。

1、继承和方法覆盖生活中的继承 2-1 生活中,继承的例子随处可见动物食草动物食肉动物谁是父类? 谁是子类? 能说出继承的特点吗?继承需要符合的关系:is-a,父类更通用、子类更具体生活中的继承 2-2 子类具有父类的一般特性(包括属性和行 为),以及自身特殊的特性巴士是汽车吗? 卡车是汽车吗? 出租车是汽车吗?最大载客数量报站引擎数量 外观颜色 刹车 加速汽车最大载重量卸货所属公司 最大载客数量 打发票属性行为请问:出租车 包含哪些属性 和行为呢?为什么需要继承 4-1 开发计算机教师类,其中教师分为Java教 师以及.NET教师,各自的要求如下: Java教师 属性:姓名、所属学校 方法:授课

2、(步骤:打开Eclipse、实施理论课授课)、自我 介绍 .NET教师 属性:姓名、所属学校 方法:授课(步骤:打开Visual studio 2005、实施理论课授 课)、自我介绍 请问:以下这个解决方案中存在着什么问 题?为什么需要继承 4-2public class DotNetTeacher private String name; / 教员姓名 private String school; /所在学校 public DotNetTeacher(String myName, String mySchool) name = myName; school = mySchool; publi

3、c void giveLession() System.out.println(“启动 Visual Studio 2005“); System.out.println(“知识点讲解“); System.out.println(“总结提问“); public void introduction() System.out.println(“大家好!我是“ + school + “的“ + name + “.“); public class JavaTeacher private String name; / 教员姓名 private String school; / 所在学校 public Ja

4、vaTeacher(String myName, String mySchool) name = myName; school = mySchool; public void giveLession() System.out.println(“启动 Eclipse“); System.out.println(“知识点讲解“); System.out.println(“总结提问“); public void introduction() System.out.println(“大家好!我是“ + school + “的“ + name + “.“); 代码存在重复,违背了“write once,

5、 only once”的原则 为什么需要继承 4-3 如何改进?有没有可能建立继承关系,让 子类自动继承父类的属性和方法? Java教师是教师吗? .NET教师是教师吗?public class Teacher private String name; /教师姓名 private String school; / 所在学校 public Teacher(String myName,String mySchool) name = myName; school = mySchool; public void giveLesson() System.out.println(“知识点讲解“); Sys

6、tem.out.println(“总结提问“); public void introduction() System.out.println(“大家好!我是“+ school + “的“ + name + “。 “); 现在,所有子类中相同的代码 都抽取到父类中了 属 性 行 为姓名 所在学校 授课 自我介绍教师Java教师.NET教师为什么需要继承 4-4 public class JavaTeacher2 extends Teacher public JavaTeacher2(String myName, String mySchool) super(myName, mySchool);

7、public void giveLesson() System.out.println(“启动 Eclipse“); super.giveLesson(); public class DotNetTeacher2 extends Teacher public DotNetTeacher2(String myName, String mySchool) super(myName, mySchool); public void giveLesson() System.out.println(“启动 Visual Studio .NET“); super.giveLesson(); 使用继承,可以有

8、效实现代码复用子类自动继承父类的属性 和方法,子类中不再存在 重复代码如何实现继承 3-1 在Java语言中,用extends关键字来表示一 个类继承了另一个类,例如:public class JavaTeacher2 extends Teacher /其余代码省略 在父类中只定义一些通用的属性与方法, 例如:public class Teacher private String name; /教师姓名 private String school; / 所在学校 public Teacher(String myName, String mySchool) /初始化属性值 public void

9、 giveLesson() /授课方法的具体实现 public void introduction() /自我介绍方法的具体实现 如何实现继承 3-2 子类自动继承父类的属性和方法,子类中 可以定义特定的属性和方法 public class Teacher private String name; /教师姓名 private String school;/ 所在中心 public Teacher (String myName, String mySchool) /初始化属性值 public void giveLesson() /授课方法的具体实现 public void introductio

10、n() /自我介绍方法的具体实现 public class JavaTeacher2 extends Teacher public JavaTeacher2(String myName, String mySchool) super(myName, mySchool); public void giveLesson() System.out.println(“启动Eclipse“); super.giveLesson(); 由于giveLesson()方法与 父类的实现有所不同,因此 重写了该方法 方法重写:子类和父类的方法具有相同的名称、参数列表、返回类型 父类中的属性和方法可 以被子类继承

11、public class JavaTeacher2 extends AccpTeacher public JavaTeacher2(String myName, String mySchool) super(myName, mySchool); 如何实现继承 3-3 子类的构造方法中,通过super关键字调用 父类的构造方法方法重写后,通过super关键字调用父类 的方法public class JavaTeacher2 extends Teacher public void giveLesson() System.out.println(“启动 Eclipse“); super.giveLe

12、sson(); 通过调用父类的构造方法, 完成对属性值的初始化protected访问控制符 protected 修饰的变量和方法可以被三种类 所访问,即,(1)类本身,(2)同一包 中的类,(3)不同包中的子类子类的继承性 属性和方法的继承 u子类能够继承父类的public和protected的变 量和方法。 u如果子类和父类在同一个包中,那么子类 能够继承父类的默认权限的变量和方法 u子类不会继承父类private的变量和方法 注意:构造方法不能被继承 见例子1,例子2变量的隐藏和方法的覆盖 1.变量的隐藏 子类中定义的全局变量和父类中的全局变 量同名时,子类会隐藏父类的变量(以子 类变量为

13、准) 2.方法的覆盖 子类中定义的方法和父类的方法如果方法 的头部完全相同,只有方法体不同,那么 子类的方法会覆盖父类的方法(以子类方 法为准)一切类的“祖先”Object 在Java 中,所有的Java类都直接或间接地 继承了java.lang.Object类public class MyObject / public class MyObect extends Object / 在Eclipse中调用MyObject 对象的成员,会自动弹出继 承自Object的所有方法小结 请编码实现动物世界的继承关系: 动物(Animal)具有行为:吃(eat)、睡觉 (sleep) 动物包括:兔子(R

14、abbit),老虎(Tiger) 这些动物吃的行为各不相同(兔子吃草,老 虎吃肉);但睡觉的行为是一致的。 请通过继承实现以上需求,并编写测试类 AnimalTest进行测试。 final类和方法 1.final类不能被继承出于安全性的考虑,将类修饰成final,使 其不能被继承,例如String类 2.final方法不能被覆盖对象的上转型对象 我们经常说老虎是食肉动物等,如果把老虎看成 是子类,食肉动物是父类的话,反映到程序中, 就是子类对象可以赋值给父类的变量: 例如: Father f=new Son();则称父类变量f为子类对象的 上转型的对象 注意:对象的上转型对象的实体是子类创建的

15、, 但是上转型对象会失去原对象的一些属性和功能 。例如:Teacher.java 和JavaTeacher.java对象的下转型 第一步:先把对象上转型假设Son类继承Father类,则Father f=new Father(); 第二步:把上转型的对象进行下转型Son s=(Son)f;相当于强制类型转换经过 下转型之后的对象,则又恢复了子类的所 有属性和方法创建子类对象时与父类构造方法的 关系 创建子类对象时,默认情况下将会调用父 类无参的构造方法,如果父类没有无参的 构造方法,那么编译将会出错 可以通过super关键字,扭转这种现象 例如:现场编程 1.创建一个Square类,要求至少包含一个构造方法 和一个计算面积的方法 2.分别创建两个类,Triangle,Rectangle类,继承 Square类,在这个两个子类中覆盖父类中计算面积 的那个方法,用于计算三角形和长方形的面积;另外 ,为这两个类分别创建至少一个构造方法. 3.建造一个测试类,在类中分别创建Triangle类和 Rectangle类的对象,并求得不同形状的面积.

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号