第四章 面向对象编程(二).ppt_第1页
第四章 面向对象编程(二).ppt_第2页
第四章 面向对象编程(二).ppt_第3页
第四章 面向对象编程(二).ppt_第4页
第四章 面向对象编程(二).ppt_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第4章 面向对象编程,继承和方法,2,回顾:,创建一个类 Circle,其中有: 一个成员变量 r(半径) 一个方法 clength,能求圆周长 一个方法 carea,能求圆面积 并建立该类的一个对象:一个半径为5的圆,并输出该圆的周长和面积。,3,收到作业中解决方法:,public class Circle int r=5; double PI=3.14; public void getClength() System.out.println(“圆的面积是:+PI*r*r); public void getArea() System.out.println(圆的周长是:+2*PI*r); ,

2、4,public static void main(String args) Circle cc=new Circle(); cc.getClength(); cc.getArea(); ,5,继承,6,生活中的继承,生活中,继承的例子随处可见,谁是父类? 谁是子类? 能说出继承的特点吗?,继承需要符合的关系:父类更通用、子类更具体,7,生活中的继承,子类具有父类的一般特性(包括属性和行为),以及自身特殊的特性,巴士是汽车吗? 卡车是汽车吗? 出租车是汽车吗?,汽车,请问:出租车包含哪些属性和行为呢?,8,为什么需要继承?,开发教师类,其中教师分为Java教师以及.NET教师,各自的要求如下:

3、 Java教师 属性:姓名、所属教研室 方法:授课(步骤:打开Eclipse、实施理论课授课)、自我介绍 .NET教师 属性:姓名、所属教研室 方法:授课(步骤:打开Visual studio 2005、实施理论课授课)、自我介绍,9,请问:以下这个解决方案中存在着什么问题?,为什么需要继承?,代码存在重复,违背了“write once, only once”的原则,10,如何改进?有没有可能建立继承关系,让子类自动继承父类的属性和方法?,Java教师是教师吗? .NET教师是教师吗?,public class Teacher private String name; / 教师姓名 priva

4、te String department; / 教研室 public Teacher(String myName, String myDepart) name = myName; department = myDepart; public void giveLesson() System.out.println(知识点讲解); System.out.println(总结提问); public void introduction() System.out.println(大家好!我是“ + department + 的 + name + 。); ,现在,所有子类中相同的代码都抽取到父类中了,11

5、,为什么需要继承 4-4,public class JavaTeacher2 extends Teacher public JavaTeacher2(String myName, String myDepart) super(myName, myDepart); public void giveLesson() System.out.println(启动 Eclipse); super.giveLesson(); ,public class DotNetTeacher2 extends Teacher public DotNetTeacher2(String myName, String my

6、Depart) super(myName, myDepart); public void giveLesson() System.out.println(启动 Visual Studio .NET); super.giveLesson(); ,使用继承,可以有效实现代码复用,子类自动继承父类的属性和方法,子类中不再存在重复代码,12,如何实现继承?,在Java语言中,用extends关键字来表示一个类继承了另一个类,例如:,public class JavaTeacher2 extends AccpTeacher /其余代码省略 ,在父类中只定义一些通用的属性与方法,例如:,public cl

7、ass Teacher private String name; / 教师姓名 private String department; / 所在教研室 public Teacher(String myName, String myDepart) /初始化属性值 public void giveLesson() /授课方法的具体实现 public void introduction() /自我介绍方法的具体实现 ,13,如何实现继承,子类自动继承父类的属性和方法,子类中可以定义特定的属性和方法,public class Teacher String name; / 教师姓名 String depa

8、rtment;/ 所在教研室 public Teacher (String myName, String myDepart) /初始化属性值 public void giveLesson() /授课方法的具体实现 public void introduction() /自我介绍方法的具体实现 ,public class JavaTeacher2 extends Teacher public JavaTeacher2(String myName, String myDepart) super(myName, myDepart); public void giveLesson() System.o

9、ut.println(启动Eclipse); super.giveLesson(); ,由于giveLesson()方法与父类的实现有所不同,因此重写了该方法,方法重写:子类和父类的方法具有相同的名称、参数列表、返回类型,父类中的属性和方法可以被子类继承,14,public class JavaTeacher2 extends Teacher public JavaTeacher2(String myName, String myDepart) super(myName, myDepart); ,如何实现继承?,子类的构造方法中,通过super关键字调用父类的构造方法,方法重写后,通过supe

10、r关键字调用父类的方法,public class JavaTeacher2 extendsTeacher public void giveLesson() System.out.println(启动 Eclipse); super.giveLesson(); ,通过调用父类的构造方法,完成对属性值的初始化,15,一切类的“祖先”Object,在Java 中,所有的Java类都直接或间接地继承了java.lang.Object类,public class MyObject / ,public class MyObect extends Object / ,在Eclipse中调用MyObject对

11、象的成员,会自动弹出继承自Object的所有方法,16,小结 1,请编码实现动物世界的继承关系: 动物(Animal)具有行为:吃(eat)、睡觉(sleep) 动物包括:兔子(Rabbit),老虎(Tiger) 这些动物吃的行为各不相同(兔子吃草,老虎吃肉);但睡觉的行为是一致的。 请通过继承实现以上需求,并编写测试类AnimalTest进行测试。,17,18,为什么需要多态 5-1,在教师类的基础上,开发一个类代表总部,负责对各教师进行评估,评估内容包括: 1、教师的自我介绍 2、教师的授课,19,为什么需要多态 5-2,public class HQ1 public void judge

12、(JavaTeacher2 t) roduction(); t.giveLesson(); public void judge(DotNetTeacher2 t) roduction(); t.giveLesson(); public static void main(String args) HQ1 hq = new HQ1(); hq.judge(new AccpJavaTeacher2(李明,北京中心“); hq.judge(new AccpDotNetTeacher2(张明,天津中心“); ,第一种解决方案,大家好!我是北京中心的李明. 启动 Eclipse 知识点

13、讲解 总结提问 大家好!我是天津中心的张明. 启动 Visual Studio 2005 知识点讲解 总结提问,控制台输出,20,为什么需要多态 5-3,现在,改进教师类,增加一种新类型:DBTeacher,该类型的教师专门负责教授数据库,要求如下: 属性:姓名、所属中心 方法:授课(启动Sql Server、实施理论课授课)、自我介绍 同时,总部也负责对这类教师进行评估,21,为什么需要多态 5-4,如果在第一种解决方案的基础上去解决,我们需要如下两个步骤: 建立DBTeacher类 修改总部类,增加方法:judge(DBTeacher t),每增加一种新的教师类型,都要修改总部类,增加相应

14、的judge(评估)方法,代码的可扩展性及可维护性极差,能找到这个解决方案的弊端吗?,22,为什么需要多态 5-5,第二种解决方案使用多态,public class HQ3 public void judge(Teacher t) roduction(); t.giveLesson(); public static void main(String args) HQ3 hq = new HQ3(); hq.judge(new AccpJavaTeacher2(李明,北京中心“); hq.judge(new AccpDotNetTeacher2(张明,天津中心); hq.judge(n

15、ew AccpDBTeacher(“李岚,北京中心“); ,可以接收子类类型,根据实际创建的对象类型调用相应方法,大家好!我是软件教研室的李明. 启动 Eclipse 知识点讲解 总结提问 大家好!我是软件教研室的张明. 启动 Visual Studio 2005 知识点讲解 总结提问 大家好!我是软件教研室的李岚. 启动 Sql Server 知识点讲解 总结提问,控制台输出,使用多态之后,当需要增加新的子类类型时,无需更改总部类,程序的可扩展性及可维护性增强,23,简单来说,多态是具有表现多种形态的能力的特征 同一个实现接口,使用不同的实例而执行不同操作,什么是多态,打印效果:彩色,打印效

16、果:黑白,打印,打印,24,如何实现多态,1、子类重写父类的方法 2、编写方法时,使用父类定义的方法 3、运行时,根据实际创建的对象类型动态决定使用哪个方法,public class Teacher public void giveLesson() System.out.println(知识点讲解); System.out.println(总结提问); ,25,小结 2,请编码实现如下需求: 乐器(Instrument)分为:钢琴(Piano)、小提琴(Violin) 各种乐器的弹奏( play )方法各不相同。 编写一个测试类InstrumentTest,要求: 编写方法testPlay,对

17、各种乐器进行弹奏测试。要依据乐器的不同,进行相应的弹奏。 在main方法中进行测试,26,总结 2-1,class Base public String name; public Base() name = Base; public Base(String pName) name = pName; public void method() System.out.println(name); ,class Child extends Base public Child() super(Child1); name=Child2; ,给定如下Java代码,编译运行后,输出结果是什么?,public

18、class Sample public static void main(String args) Child c = new Child(); c.method(); ,Child2,控制台输出,1,2,3,27,总结 2-2,给定如下Java代码,编译运行后,输出结果是什么?,public class Teacher public void giveLesson() System.out.println(知识点讲解); ,public class DBTeacher extends Teacher public void giveLesson() System.out.println(启动

19、 SqlServer); ,1,2,public class Test public static void main(String args) Teacher t = new DBTeacher (); t.giveLesson(); ,控制台输出,启动 SqlServer,28,生活中的方法重载,类,方法,方法参数,方法实现,司机,轿车,巴士,火车,驾驶,启动、行驶、,等待乘客上车、启动、 行驶、到站停车、,正点发车、行驶、 到站停车、,如果用代码实现,我们需要三个方法,这些方法的方法名称相同,参数类型不同,29,方法重载的代码示例 1,方法重载并不陌生 java.io.PrintStre

20、am类的println方法能够打印数据并换行,根据数据类型的不同,有多种实现方式,public class Test public static void main(String args) int i = 0; char c = z; String str = hello; System.out.println(i); System.out.println(c); System.out.println(str); ,方法名相同,参数类型不同,调用不同的println方法,方法重载,30,方法重载的代码示例 2,java.lang.Math类的max()方法能够从两个数字中取出最大值,它有多种

21、实现方式 运行时,Java虚拟机先判断给定参数的类型,然后决定到底执行哪个max()方法,public class Test public static void main(String args) Math.max(1,2); Math.max(1.0F,2.F); Math.max(1.0,2); ,方法重载,31,构造方法重载 2-1,构造方法重载是方法重载的典型示例,public class Teacher7 private String name; / 教师姓名 private String department = “软件教研室”; / 所在教研室 Public Teacher7(

22、String name) = name; /设定教师姓名 public Teacher7(String name, String department) = name; /设定教师姓名 this.department = department; /设定教师教研室 public String introduction() return 大家好!我是 + department + 的 + name ; ,构造方法重载,32,构造方法重载 2-2,通过调用不同的构造方法来表达对象的多种初始化行为 例如: 默认情况下,教师来自北京中心,初始化时,只需提供教师姓名

23、 有时,需要提供所在中心名称及教师姓名,public class AccpTeacher7Test public static void main(String args) Teacher7 teacher1 = new Teacher7(李芳); System.out.println(roduction(); Teacher7 teacher2 = new Teacher7(张欣, “网络教研室); System.out.println(roduction(); ,大家好!我是软件教研室的李芳 大家好!我是网络教研室的张欣,33,方法的重写和重

24、载总结,34,方法的重载(overload),在同一个类中,一个以上的方法名称相同,参数列表不同,这种定义方法叫做方法的重载。,35,36,例如:,public int summn(int m,int n) return m+n; public int summn(int m,int n,int k) return m+n+k; ,37,例如:,public int summn(int m,int n) return m+n; public int summn(int x,int y) return x+y; /是重载吗?,不是,38,方法的重写 在子类中,声明和父类中完全相同(方法名字、参数

25、类型、个数和顺序)的方法,叫做方法的重写。 方法的重载和方法的重写,都是实现类的多态性的重要途径。 重写隐藏了父类中的同名成员。如果子类中成员 m 是重写的,则在子类中访问 m 时,访问的是子类中的,而不是父类中的 m。,39,访问被重写的方法:,有时,需要在子类中访问父类中被重写的方法,可使用 super 关键字来实现。 super 代表当前类的直接父类。,40,public class Fclass public int sum(int m,int n) return m+n; ,public class Sclass extends Fclass public int sum(int m

26、,int n) int x; x=super.sum(m,n); return x+x; ,方法重写示例:,41,总结,给定如下Java代码,请指出代码中的错误,并解释原因。,public class Sample private int x; public Sample() x = 1; public Sample(int i) x = i; public int Sample(int i) x = i; return x+; private Sample(int i, String s) public Sample(String s,int i) private Sampla(int i) x

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论