面向对象的Java实现封装2
发布时间:2021-06-05
发布时间:2021-06-05
面向对象的Java实现封装
第二章面向对象的Java实现 继承和多态 实现-继承和多态 面向对象的 实现
面向对象的Java实现封装
回顾
在Java程序中,代码封装带给我们的好处是什么? 程序中,代码封装带给我们的好处是什么? 程序中 举例说明什么是方法重载? 举例说明什么是方法重载? Java中的构造方法与实例方法,有什么区别? 中的构造方法与实例方法,有什么区别? 中的构造方法与实例方法
面向对象的Java实现封装
预习检查
举例说明在什么样的情况下,需要使用到继承? 举例说明在什么样的情况下,需要使用到继承? 程序中, 在Java程序中,多态性带给我们的好处是什么? 程序中 多态性带给我们的好处是什么?
面向对象的Java实现封装
本章任务
升级HelloACCP,输出ACCP5.0教员的基本信息: ,输出 教员的基本信息: 升级 教员的基本信息 使用继承提高代码的复用性 使用多态提高代码的可扩展性及可维护性
面向对象的Java实现封装
本章目标
掌握继承 掌握super关键字 掌握 关键字 掌握多态
面向对象的Java实现封装
生活中的继承 2-1生活中, 生活中,继承的例子随处可见动物 谁是父类? 谁是父类? 谁是子类? 谁是子类? 能说出继承的特点吗? 能说出继承的特点吗?
食草动物
食肉动物
继承需要符合的关系: 继承需要符合的关系:is-a,父类更通用,子类更具体 ,父类更通用,6
面向对象的Java实现封装
生活中的继承 2-2子类具有父类的一般特性(包括属性和行为),以及自身 子类具有父类的一般特性(包括属性和行为),以及自身 ), 特殊的特性巴士是汽车吗? 巴士是汽车吗? 卡车是汽车吗? 卡车是汽车吗? 出租车是汽车吗? 出租车是汽车吗? 汽车 引擎数量 外观颜色 刹车 加速 属性 行为
请问: 请问:出租车 包含哪些属性 和行为呢? 和行为呢? 最大载客数量 报站 最大载重量 卸货 所属公司 最大载客数量 打发票7
面向对象的Java实现封装
为什么需要继承 4-1
开发ACCP教员类,其中教员分为Java教员以及 教员类,其中教员分为 教员以及.NET教 开发 教员类 教员以及 教 各自的要求如下: 员,各自的要求如下:Java教员 教员属性:姓名, 属性:姓名,所属中心 方法:授课(步骤:打开Eclipse,实施理论课授课),自我介绍 ),自我介绍 方法:授课(步骤:打开 ,实施理论课授课),
.NET教员 教员属性:姓名, 属性:姓名,所属中心 方法:授课(步骤:打开Visual studio 2005,实施理论课授课), 方法:授课(步骤:打开 ,实施理论课授课), 自我介绍
面向对象的Java实现封装
为什么需要继承 4-2请问:以下这个解决方案中存在着什么问题? 请问:以下这个解决方案中存在着什么问题?public class AccpDotNetTeacher { private String name; // 教员姓名 public class AccpJavaTeacher { private String name; // 教员姓名 private String school; // 所在中心 private String school; // 所在中心 public AccpDotNetTeacher(String public AccpJavaTeacher(String myName, myName, String mySchool) { String mySchool) { name = myName; name = my
Name; school = mySchool; school = mySchool; } } public void giveLession(){ System.out.println("启动 Visual public void giveLession(){ 启动 System.out.println("启动 Eclipse"); 启动 Studio 2005"); System.out.println("知识点讲解 知识点讲解"); 知识点讲解 System.out.println("知识点讲解 知识点讲解"); 知识点讲解 System.out.println("总结提问 总结提问"); 总结提问 System.out.println("总结提问 总结提问"); 总结提问 } } public void introduction() { public void introduction() { System.out.println("大家好!我是 大家好! 大家好 我是" System.out.println("大家好!我是 大家好! 大家好 我是" + school + "的" + name + "."); 的 + school + "的" + name + "."); 的 } } 9 代码存在重复,违背了" 代码存在重复,违背了} write once, only once"的原则 " 的原则 }
面向对象的Java实现封装
为什么需要继承 4-3如何改进?有没有可能建立继承关系, 如何改进?有没有可能建立继承关系,让子类自动继承父 类的属性和方法? 类的属性和方法?Java教员是教员吗? 教员是教员吗? 教员是教员吗 .NET教员是教员吗? 教员是教员吗? 教员是教员吗 教员 姓名 所在中心 授课 自我介绍 public class AccpTeacher { private String name; // 教员姓名 private String school; // 所在中心 public AccpTeacher(String myName, 属 String mySchool) { 性 name = myName; 行 school = mySchool; 为 } public void giveLesson(){ System.out.println("知识点讲解 知识点讲解"); 知识点讲解 System.out.println("总结提问 总结提问"); 总结提问 } public void introduction() { System.out.println("大家好!我是 大家好! 大家好 " + school + "的" + name + "."); 的 . 现在, 现在,所有子类中相同的代 } 10 码都抽取到父类中了 }
Java教员 教员
.NET教员 教员
面向对象的Java实现封装
为什么需要继承 4-4public class AccpJavaTeacher2 extends AccpTeacher { public AccpJavaTeacher2(String myName, String mySchool) { super(myName, mySchool); 子类自动继承父类的属 } 性和方法, 性和方法,子类中不再 public void giveLesson(){ 存在重复代码 System.out.println("启动 Eclipse"); 启动 super.giveLesson(); } } public class AccpDotNetTeacher2 extends AccpTeacher { public AccpDotNetTeacher2(String myName, String mySchool) { super(myName, mySchool); } public void giveLesson(){ System.out.println("启动 Visual Studio .NET"); 启动 super.giveLesson(); } } 使用继承, 使用继承,可以有效实现代码复用
面向对象的Java实现封装
如何实现继承 3-1语言中, 在Java语言中,用extends关键字来表示一个类继承了另 语言中 关键字来表示一个类继承了另 一个类,例如: 一个类,例如:public class AccpJavaTeacher2 extends AccpTeacher { //其余代码省略 其余代码省略 }
在父类中只定义一些通用的属性与方法,例如: 在父类中只定义一些通用的属性与方法,例如:public class AccpTeacher { private String name; // 教员姓名 private String school; // 所在中心 publi
c AccpTeacher(String myName, String mySchool) { //初始化属性值 初始化属性值 } public void giveLesson() { //授课方法的具体实现 } 授课方法的具体实现 public void introduction() { //自我介绍方法的具体实现 } 自我介绍方法的具体实现 }12
面向对象的Java实现封装
如何实现继承 3-2子类自动继承父类的属性和方法, 子类自动继承父类的属性和方法,子类中可以定义特定 的属性和方法public class AccpTeacher { private String name; // 教员姓名 public class AccpJavaTeacher2 extends private String school;// 所在中心 AccpTeacher { public AccpTeacher (String public AccpJavaTeacher2(String myName, String mySchool) { myName, String mySchool) { //初始化属性值 初始化属性值 super(myName, mySchool); } } public void giveLesson() { public void giveLesson(){ //授课方法的具体实现 授课方法的具体实现 System.out.println("启动 启动Eclipse"); 启动 } super.giveLesson(); public void introduction() { } //自我介绍方法的具体实现 自我介绍方法的具体实现 } 由于giveLesson()方法与 由于 方法与 } 父类的实现有所不同, 父类的实现有所不同,因 } 父类中的属性和方法可 此重写了该方法 以被子类继承 方法重写:子类和父类的方法具有相同的名称,参数列表, 方法重写:子类和父类的方法具有相同的名称,参数列表,返回类型13
面向对象的Java实现封装
如何实现继承 3-3子类的构造方法中,通过 子类的构造方法中,通过super关键字调用父类的构造方法 关键字调用父类的构造方法public class AccpJavaTeacher2 extends AccpTeacher { public AccpJavaTeacher2(String myName, String mySchool) { super(myName, mySchool); } 通过调用父类的构造方法, 通过调用父类的构造方法, } 完成对属性值的初始化
方法重写后,通过 方法重写后,通过super关键字调用父类的方法 关键字调用父类的方法public class AccpJavaTeacher2 extends AccpTeacher { public void giveLesson(){ System.out.println("启动 Eclipse"); 启动 super.giveLesson(); } }14
面向对象的Java实现封装
一切类的"祖先" 一切类的"祖先"——Object所有的Java类都直接或间接地继承了 在Java 中,所有的 类都直接或间接地继承了 ng.Object类 类public class MyObject { //… } public class MyObect extends Object { //… }
中调用MyObject 在Eclipse中调用 中调用 对象的成员, 对象的成员,会自动弹出继 承自Object的所有方法 承自 的所有方法
面向对象的Java实现封装
小结 1
请编码实现动物世界的继承关系: 请编码实现动物世界的继承关系:动物( ),睡觉 动物(Animal)具有行为:吃(eat),睡觉(sleep) )具有行为: ),睡觉( ) 动物包括:兔子( ),老虎 动物包括:兔子(Rabbit),老虎(Tiger) ),老虎( ) 这些动物吃的行为各不相同(兔子吃草,老虎吃肉); );但睡觉 这些动物吃的行为各不相同(兔子吃草,老虎吃肉);但睡觉 的行为是一致的. 的行为是一致的.
请通过继承实现以上需
求,并编写测试类 请通过继承实现以上需求,并编写测试类AnimalTest 进行测试. 进行测试.
完整代码实现16
面向对象的Java实现封装
为什么需要多态 5-1
教员类的基础上, 在ACCP教员类的基础上,开发一个类代表总部,负责 教员类的基础上 开发一个类代表总部, 对各教员进行评估,评估内容包括: 对各教员进行评估,评估内容包括:1,教员的自我介绍 , 2,教员的授课 ,
面向对象的Java实现封装
为什么需要多态 5-2第一种解决方案
public class HQ1 { public void judge(AccpJavaTeacher2 t){ t.introduction(); 大家好!我是天津中心的张明. 大家好!我是天津中心的张明 t.giveLesson(); 启动 Visual Studio 2005 } public void judge(AccpDotNetTeacher2 t){ 知识点讲解 总结提问 t.introduction(); t.giveLesson(); } public static void main(String[] args) { 控制台输出 HQ1 hq = new HQ1(); hq.judge(new AccpJavaTeacher2("李明 北京中心")); 李明","北京中心 李明 北京中心" hq.judge(new AccpDotNetTeacher2("张明 天津中心")); 张明","天津中心 张明 天津中心" } }18
大家好!我是北京中心的李明 大家好!我是北京中心的李明. 启动 Eclipse 知识点讲解 总结提问
面向对象的Java实现封装
为什么需要多态 5-3
现在,升级 教员类, 现在,升级ACCP教员类,增加一种新类型: 教员类 增加一种新类型: AccpDBTeacher,该类型的教员专门负责教授数据库, ,该类型的教员专门负责教授数据库, 要求如下: 要求如下:属性:姓名, 属性:姓名,所属中心 方法:授课(启动Sql Server,实施理论课授课),自我介绍 ),自我介绍 方法:授课(启动 ,实施理论课授课),
同时, 同时,总部也负责对这类教员进行评估