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

下载本文档

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

文档简介

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

2、stem.out.println(圆的周长是圆的周长是:+2*PI*r);l 4lpublic static void main(String args) l Circle cc=new Circle();l cc.getClength();l cc.getArea();ll5继承6生活中的继承生活中的继承l生活中,继承的例子随处可见动物动物食草动物食草动物食肉动物食肉动物谁是父类?谁是父类?谁是子类?谁是子类?能说出继承的特点吗?能说出继承的特点吗?继承需要符合的关系:父类更通用、子类更具体继承需要符合的关系:父类更通用、子类更具体7生活中的继承生活中的继承l子类具有父类的一般特性(包括属性

3、和行为),以及自身特殊的特性巴士是汽车吗?巴士是汽车吗?卡车是汽车吗?卡车是汽车吗?出租车是汽车吗?出租车是汽车吗?最大载客数量最大载客数量报站报站引擎数量引擎数量外观颜色外观颜色刹车刹车加速加速汽车汽车最大载重量最大载重量卸货卸货所属公司所属公司最大载客数量最大载客数量打发票打发票属性属性行为行为请问:出租车请问:出租车包含哪些属性包含哪些属性和行为呢?和行为呢?8为什么需要继承?为什么需要继承?l开发教师类,其中教师分为Java教师以及.NET教师,各自的要求如下:Java教师教师属性:姓名、所属教研室属性:姓名、所属教研室方法:授课(步骤:打开方法:授课(步骤:打开Eclipse、实施理

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

5、at) name = myName; department = myDepart;public void giveLession()System.out.println(启动启动 Visual Studio 2005);System.out.println(知识点讲解知识点讲解);System.out.println(总结提问总结提问); public void introduction() System.out.println(大家好!我是大家好!我是 +department+ 的的 + name + .); public class JavaTeacher private String n

6、ame; / 教师姓名教师姓名private String department; / 教研室教研室public JavaTeacher(String myName, String myDepart) name = myName; department= myDepart;public void giveLession()System.out.println(启动启动 Eclipse);System.out.println(知识点讲解知识点讲解);System.out.println(总结提问总结提问);public void introduction() System.out.println

7、(大家好!我是大家好!我是 + department + 的的 + name + .); 代码存在重复,违背了代码存在重复,违背了“write once, only once”的原则的原则 10l如何改进?有没有可能建立继承关系,让子类自动继承父类的属性和方法?Java教师是教师吗?教师是教师吗?.NET教师是教师吗?教师是教师吗?public class Teacher private String name; / 教师姓名教师姓名private String department; / 教研室教研室public Teacher(String myName, String myDepart)

8、 name = myName;department = myDepart;public void giveLesson()System.out.println(知识点讲解知识点讲解);System.out.println(总结提问总结提问); public void introduction() System.out.println(大家好!我是大家好!我是“ + department + 的的 + name + 。); 现在,所有子类中相同的代码现在,所有子类中相同的代码都抽取到父类中了都抽取到父类中了 属属性性行行为为姓名姓名教研室教研室授课授课自我介绍自我介绍教师教师Java教师教师.N

9、ET教师教师11为什么需要继承为什么需要继承 4-44-4public 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 myNa

10、me, String myDepart) super(myName, myDepart);public void giveLesson()System.out.println(启动启动 Visual Studio .NET);super.giveLesson();使用继承,可以有效实现代码复用使用继承,可以有效实现代码复用子类自动继承父类的属性子类自动继承父类的属性和方法,子类中不再存在和方法,子类中不再存在重复代码重复代码12如何实现继承?如何实现继承?l在在Java语言中,用语言中,用extends关键字关键字来表示来表示一个类继承了另一个类,例如:一个类继承了另一个类,例如:public

11、 class JavaTeacher2 extends AccpTeacher /其余代码省略其余代码省略l在父类中只定义一些通用的属性与方法,例如:public class Teacher private String name; / 教师姓名教师姓名private String department; / 所在教研室所在教研室public Teacher(String myName, String myDepart) /初始化属性值初始化属性值public void giveLesson() /授课方法的具体实现授课方法的具体实现 public void introduction() /自

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

13、blic class JavaTeacher2 extends Teacher public JavaTeacher2(String myName, String myDepart) super(myName, myDepart);public void giveLesson()System.out.println(启动启动Eclipse);super.giveLesson();由于由于giveLesson()方法与方法与父类的实现有所不同,因父类的实现有所不同,因此重写了该方法此重写了该方法 方法重写:子类和父类的方法具有相同的名称、参数列表、返回类型方法重写:子类和父类的方法具有相同的名称

14、、参数列表、返回类型 父类中的属性和方法可父类中的属性和方法可以被子类继承以被子类继承14public class JavaTeacher2 extends Teacher public JavaTeacher2(String myName, String myDepart) super(myName, myDepart);如何实现继承?如何实现继承?l子类的构造方法中,通过super关键字调用父类的构造方法l方法重写后,通过super关键字调用父类的方法public class JavaTeacher2 extendsTeacher public void giveLesson()Syste

15、m.out.println(启动启动 Eclipse);super.giveLesson();通过调用父类的构造方法,通过调用父类的构造方法,完成对属性值的初始化完成对属性值的初始化15一切类的一切类的“祖先祖先”ObjectObjectl在Java 中,所有的Java类都直接或间接地继承了java.lang.Object类public class MyObject /public class MyObect extends Object /在在Eclipse中调用中调用MyObject对象的成员,会自动弹出继对象的成员,会自动弹出继承自承自Object的所有方法的所有方法16小结小结 1 1

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

17、课19为什么需要多态为什么需要多态 5-25-2public class HQ1 public void judge(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 AccpDotNetTe

18、acher2(张明张明,天津中心天津中心“);l第一种解决方案大家好!我是北京中心的李明大家好!我是北京中心的李明.启动启动 Eclipse知识点讲解知识点讲解总结提问总结提问大家好!我是天津中心的张明大家好!我是天津中心的张明.启动启动 Visual Studio 2005知识点讲解知识点讲解总结提问总结提问20为什么需要多态为什么需要多态 5-35-3l现在,改进教师类,增加一种新类型:DBTeacher,该类型的教师专门负责教授数据库,要求如下:属性:姓名、所属中心属性:姓名、所属中心方法:授课(启动方法:授课(启动Sql Server、实施理论课授、实施理论课授课)、自我介绍课)、自我

19、介绍l同时,总部也负责对这类教师进行评估21为什么需要多态为什么需要多态 5-45-4l如果在第一种解决方案的基础上去解决,我们需要如下两个步骤:建立建立DBTeacher类类修改总部类,增加方法:修改总部类,增加方法:judge(DBTeacher t)每增加一种新的教师类型,都要修改总部类,增加相应的每增加一种新的教师类型,都要修改总部类,增加相应的judge(评估评估)方法,代码的可扩展性及可维护性极差方法,代码的可扩展性及可维护性极差 能找到这个解决方案的弊端吗?能找到这个解决方案的弊端吗?22为什么需要多态为什么需要多态 5-55-5l第二种解决方案使用多态public class

20、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(new AccpDBTeacher(“李岚李岚,北京中心北京中心“);可以接收子类类型可以接收子类类型根据实际创建的对象根据实际创建的对象类型调用相应方法类

21、型调用相应方法大家好!我是软件教研室的李明大家好!我是软件教研室的李明.启动启动 Eclipse知识点讲解知识点讲解总结提问总结提问大家好!我是软件教研室的张明大家好!我是软件教研室的张明.启动启动 Visual Studio 2005知识点讲解知识点讲解总结提问总结提问大家好!我是软件教研室的李岚大家好!我是软件教研室的李岚.启动启动 Sql Server知识点讲解知识点讲解总结提问总结提问控制台输出控制台输出使用多态之后,当需要增加新的子类类型时,无需更改总部类,程序的可扩展性及可维护性增强 23l简单来说,多态是具有表现多种形态的能力的特征 l同一个实现接口,使用不同的实例而执行不同操作

22、什么是多态什么是多态打印效果:彩色打印效果:彩色打印效果:黑白打印效果:黑白打印打印 打印打印 彩色打印机彩色打印机 打印机打印机 黑白打印机黑白打印机24如何实现多态如何实现多态1、子类子类重写重写父类的方法父类的方法2、编写方法时,使用父类定义的方法、编写方法时,使用父类定义的方法3、运行时,根据实际创建的对象类型动态决定使用、运行时,根据实际创建的对象类型动态决定使用哪个方法哪个方法public class DBTeacher extends Teacher public void giveLesson() System.out.println(启动启动 SqlServer); supe

23、r.giveLesson(); 1public class Teacher public void giveLesson() System.out.println(知识点讲解知识点讲解); System.out.println(总结提问总结提问); public class HQ3 public void judge(Teacher t) t.giveLesson(); 2public class Test public static void main(String args) HQ3 hq = new HQ3(); hq.judge(new DBTeacher(); 325小结小结 2 2

24、l请编码实现如下需求:乐器(乐器(Instrument)分为:钢琴)分为:钢琴(Piano)、小、小提琴提琴(Violin)各种乐器的弹奏(各种乐器的弹奏( play )方法各不相同。)方法各不相同。l编写一个测试类InstrumentTest,要求:编写方法编写方法testPlay,对各种乐器进行弹奏测试。,对各种乐器进行弹奏测试。要依据乐器的不同,进行相应的弹奏。要依据乐器的不同,进行相应的弹奏。在在main方法中进行测试方法中进行测试26总结总结 2-12-1class Base public String name;public Base()name = Base;public Bas

25、e(String pName)name = pName;public void method()System.out.println(name);class Child extends Basepublic Child()super(Child1);name=Child2;给定如下Java代码,编译运行后,输出结果是什么?public class Sample public static void main(String args) Child c = new Child(); c.method(); Child2 控制台输出控制台输出12327总结总结 2-22-2给定如下Java代码,编译

26、运行后,输出结果是什么?public class Teacher public void giveLesson()System.out.println(知识点讲解知识点讲解);public class DBTeacher extends Teacher public void giveLesson()System.out.println(启动启动 SqlServer);12public class Test public static void main(String args) Teacher t = new DBTeacher ();t.giveLesson(); 控制台输出控制台输出 启

27、动启动 SqlServer 28生活中的方法重载生活中的方法重载类类方法方法方法参数方法参数方法实现方法实现司机司机 轿车轿车 巴士巴士 火车火车 驾驶驾驶启动、行驶、启动、行驶、等待乘客上车、启动、等待乘客上车、启动、行驶、到站停车、行驶、到站停车、正点发车、行驶、正点发车、行驶、到站停车、到站停车、如果用代码实现,我们需要三个方法,这些方法的方法名称如果用代码实现,我们需要三个方法,这些方法的方法名称相同,参数类型不同相同,参数类型不同 29方法重载的代码示例方法重载的代码示例 1 1l方法重载并不陌生ljava.io.PrintStream类的println方法能够打印数据并换行,根据数

28、据类型的不同,有多种实现方式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);PrintStreamprintln(int)println(char)println(String)方法名相同,参数类型不同方法名相同,参数类型不同调用不同的调用不同的println方法方法方法重载方法重载30方法重载的代码示例方法重载的代码示

29、例 2 2ljava.lang.Math类的max()方法能够从两个数字中取出最大值,它有多种实现方式l运行时,Java虚拟机先判断给定参数的类型,然后决定到底执行哪个max()方法Mathmax(int a,int b)max(float a,float b)max(long a,long b)max(double a,double b)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-

30、12-1l构造方法重载是方法重载的典型示例public class Teacher7 private String name; / 教师姓名教师姓名private String department = “软件教研室软件教研室”; / 所在教研室所在教研室Public Teacher7(String name) = name; /设定教师姓名设定教师姓名public Teacher7(String name, String department) = name; /设定教师姓名设定教师姓名this.department = department; /设定

31、教师教研室设定教师教研室public String introduction() return 大家好!我是大家好!我是 + department + 的的 + name ;构造方法重载构造方法重载32构造方法重载构造方法重载 2-22-2l通过调用不同的构造方法来表达对象的多种初始化行为l例如:默认情况下,教师来自北京中心,初始化时,只默认情况下,教师来自北京中心,初始化时,只需提供教师姓名需提供教师姓名有时,需要提供所在中心名称及教师姓名有时,需要提供所在中心名称及教师姓名public class AccpTeacher7Test public static void main(Strin

32、g args) Teacher7 teacher1 = new Teacher7(李芳李芳);System.out.println(roduction();Teacher7 teacher2 = new Teacher7(张欣张欣, “网络教研室网络教研室);System.out.println(roduction();大家好!我是软件教研室的李芳大家好!我是软件教研室的李芳大家好!我是网络教研室的张欣大家好!我是网络教研室的张欣33方法的重写和重载总结方法的重写和重载总结34方法的重载方法的重载(overload)(overload)l在在同一

33、个类同一个类中中,一个以上的方法,一个以上的方法名称相同名称相同,参数列表不同参数列表不同,这种,这种定义方法叫做方法的定义方法叫做方法的重载重载。 3536例如:例如: 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; /是重载吗?是重载吗?不是不是38l方法的重写l 在子类中

34、,声明和父类中完全相同(方法名字、参数类型、个数和顺序)的方法,叫做方法的重写。 方法的重载和方法的重写,都是实现类的多态性的重要途径。 重写隐藏了父类中的同名成员。如果子类中成员 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,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;retur

温馨提示

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

评论

0/150

提交评论