Java面向对象程序设计课件_第1页
Java面向对象程序设计课件_第2页
Java面向对象程序设计课件_第3页
Java面向对象程序设计课件_第4页
Java面向对象程序设计课件_第5页
已阅读5页,还剩80页未读 继续免费阅读

下载本文档

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

文档简介

1、Java面向对象程序设计第三章第三章 JavaJava面向对象程序设计面向对象程序设计面向对象概述面向对象概述 3.1类与对象类与对象3.2成员变量和成员方法成员变量和成员方法3.3继承与多态继承与多态3.4包、接口与内部类包、接口与内部类3.5Java面向对象程序设计万物皆对象万物皆对象v世界是由什么组成的? 名胜名胜 人人 物品物品 动物动物 ,植物,植物 Java面向对象程序设计身边的对象身边的对象布兰尼布兰尼朱丽叶朱丽叶顾客顾客姓名:朱丽叶姓名:朱丽叶年龄:年龄:28体重:体重:52千克千克操作:操作:购买商品购买商品姓名:布兰尼姓名:布兰尼职衔:收银员职衔:收银员年龄:年龄:35体重

2、:体重:60千克千克操作:操作:收款收款打印账单打印账单Java面向对象程序设计对象的特征对象的特征属性属性v属性对象具有的各种特征v每个对象的每个属性都拥有特定值 例如:布兰尼和朱丽叶的体重不一样 60kg 布兰尼布兰尼属性属性 35岁岁收银员布兰尼收银员布兰尼 Java面向对象程序设计对象的特征对象的特征方法方法v方法对象执行的操作 打单打单 收银收银 方法方法 刷卡刷卡 收银员布兰尼收银员布兰尼Java面向对象程序设计对象的属性和方法对象的属性和方法v 列出尼古拉斯凯奇驾驶的这辆法拉利F360 Spider的属性和方法v 列出小狗对象的属性和方法属性:属性: 品牌:法拉利品牌:法拉利 型

3、号:型号:F360 Spider 颜色:黄色颜色:黄色 价格:价格:380万元万元方法:方法: 发动发动 停止停止 加速加速属性:属性: 颜色:白色颜色:白色方法:方法: 叫叫 跑跑 吃吃Java面向对象程序设计小结小结1v 说一说教室里的对象v 描述他们的属性和方法 颜色:黑色颜色:黑色品牌:品牌:BENQ投影投影姓名:张三姓名:张三年龄:年龄:20学习学习类型:白炽灯类型:白炽灯开开关关变亮变亮变暗变暗材制材制: 木质木质支撑物品支撑物品Java面向对象程序设计封装封装v对象同时具有属性和方法两项特性v对象的属性和方法通常被封装在一起,共同体现事物的特性, 二者相辅相承,不能分割谁看见过只

4、有谁看见过只有“完好完好的零件和颜色的零件和颜色”而不而不能开动的汽车?能开动的汽车?Java面向对象程序设计从对象抽象出从对象抽象出“类类”抽取出下列对象的属性和方法的共同特征 顾客顾客 Java面向对象程序设计类类顾客类轿车类 类是模子,确定对象将会拥有的类是模子,确定对象将会拥有的特征(属性)和行为(方法)特征(属性)和行为(方法)v类是对象的类型 不同于int类型:具有方法 各种口味的球状冰淇淋各种口味的球状冰淇淋 球状冰淇淋模子球状冰淇淋模子Java面向对象程序设计小结小结2v类和对象有什么区别呢? 类是抽象的概念,仅仅是模板,比如说:“人” 对象是一个你能够看得到、摸得着的具体实体

5、,比如:“小布什”小布什小布什普京普京克林顿克林顿“人”类特征(属性)年龄体重行为(方法)衣食住行Java面向对象程序设计Java 是面向对象的语言是面向对象的语言 v所有Java程序都以类class为组织单元v关键字class定义自定义的数据类型 public class Hello public static void main(String args) System.out.println(使用使用Java语言理解程序逻辑语言理解程序逻辑); Java面向对象程序设计Java类模板类模板v类将现实世界中的概念模拟到计算机程序中public class 类名类名 /定义属性部分定义属性部分

6、 属性属性1的类型的类型 属性属性1; 属性属性2的类型的类型 属性属性2; 属性属性n的类型的类型 属性属性n; /定义方法部分定义方法部分 方法方法1; 方法方法2; 方法方法m;Java面向对象程序设计定义类定义类v定义一个类的步骤1、定义类名2、编写类的属性3、编写类的方法Java面向对象程序设计类示例类示例2-1用类的思想输出计算机培训中心信息AccpSchool类属性:中心全称中心教室数目中心机房数目方法:展示中心信息Java面向对象程序设计类示例类示例2-2public class AccpSchool /定义培训中心的属性定义培训中心的属性 String schoolName;

7、 / 中心的全称中心的全称 int classNum; /教室的数目教室的数目 int labNum; /机房的数目机房的数目 / 定义培训中心的方法定义培训中心的方法 public String toString() return schoolName + 培训培训ACCP学员学员 + n + 配备:配备:+ classNum + 教教 + labNum + 机机; 定义类的定义类的toString()方法,方法,用于输出类相关的信息用于输出类相关的信息 public String toString() return 字符串;字符串; /方法体方法体 成员变量成员变量Java面向对象程序设计

8、常见错误常见错误public class .Book String bookName; String authorName; int pageNum; boolean isAvailable; 类命名规则:类命名规则:1、不能使用、不能使用Java关键字关键字2、首字母可以为字母,也可以是、首字母可以为字母,也可以是“_”或或“$ ”(建议不要这建议不要这样样)3、不能包含空格或、不能包含空格或“.”号号代码错误代码错误Java面向对象程序设计如何创建和使用对象如何创建和使用对象v使用对象的步骤: 使用new创建类的一个对象 使用对象:使用“.”进行以下操作 给类的属性赋值:对象名.属性 调用

9、类的方法:对象名.方法名()AccpSchool center = new AccpSchool();center.schoolName = 北京中心北京中心; /给属性赋值给属性赋值center.toString(); /调用类的方法,该方法中的操作将被执行调用类的方法,该方法中的操作将被执行Java面向对象程序设计public class InitialAccpSchool public static void main(String args) AccpSchool center = new AccpSchool(); System.out.println(center); center

10、.schoolName = 北京中心北京中心; center.classNum = 10; center.labNum = 10; System.out.println(center); 创建和使用对象示例创建和使用对象示例创建创建“北京中心北京中心”对象对象说一说看到说一说看到什么效果?什么效果? 调用类的调用类的toString()方法是特方法是特例:这里使用例:这里使用center.toString()和和center作作用相同用相同更简便更简便Java面向对象程序设计综合案例综合案例v编写学生类,输出学生相关信息v编写教员类,输出教员相关信息学生类属性:姓名年龄参加的课程兴趣方法:显示

11、学员个人信息教员类属性:姓名专业方向教授的课程教龄方法:显示教员个人信息Java面向对象程序设计小结小结3v编写一个手机类,并编写测试类显示手机信息Java面向对象程序设计为什么需要封装为什么需要封装 2-1v编写一个类,代表教员,要求: 具有属性:姓名、年龄 具有行为:自我介绍 教师的最小年龄要求:22岁public class Teacher1public String name; / 教员姓名教员姓名public int age; /年龄年龄/* * 返回自我介绍的内容返回自我介绍的内容 */public String introduction() return 大家好!我是大家好!我是

12、 + name + ,我今年我今年+ age+岁岁;Java面向对象程序设计为什么需要封装为什么需要封装 2-2v编写一个测试类,要求: 实例化一个教员对象,并对其初始化 在控制台输出该教员的自我介绍public class Teacher1Test public static void main(String args) Teacher1 teacher = new Teacher1(); = 李芳李芳;teacher.age =10;System.out.println(roduction(); 要满足教员的最小年龄要求,可以通过对属性的封装来实现要满足教员的最小年龄

13、要求,可以通过对属性的封装来实现大家好!我是李芳,我今年大家好!我是李芳,我今年1010岁岁Java面向对象程序设计什么是封装什么是封装public class Teacher2 private String name; / 教员姓名教员姓名/ 返回教员姓名返回教员姓名public String getName() return name;/ 设定教员姓名设定教员姓名public void setName(String name) = name;v封装,就是隐藏实现细节 将属性私有化,提供公有方法访问私有属性 通过这些公有方法访问私有属性 Teacher2 teacher = new Teac

14、her2();teacher.setName (李芳李芳);String tName = teacher.getName();通过通过setter、getter方法方法访问访问name属性属性this代表当前类的实例代表当前类的实例Java面向对象程序设计如何实现封装如何实现封装2-1v 封装的实现:1、修改属性的可见性来限制对属性的访问2、为每个属性创建一对赋值(setter)方法和取值(getter) 方法,用于对这些属性的访问3、在setter和getter方法中,加入对属性的存取限制public class Teacher3 private String name; / 教员姓名教员姓

15、名private int age; /年龄年龄public int getAge() return age;public void setAge(int age) if (age22) System.out.println(错误!最小年龄应为错误!最小年龄应为22岁!岁!);this.age = 22; /如果不符合年龄要求,则赋予默认值如果不符合年龄要求,则赋予默认值 else this.age = age; /此处省略对此处省略对name属性的属性的setter、getter方法方法123Java面向对象程序设计如何实现封装如何实现封装2-2public class Teacher3Tes

16、t public static void main(String args) Teacher3 teacher = new Teacher3();teacher.setName (李芳李芳);teacher.setAge(10);System.out.println(roduction();使用封装,增加了数据访问限制,增强了程序的可维护性使用封装,增加了数据访问限制,增强了程序的可维护性 错误!最小年龄应为错误!最小年龄应为22岁!岁!大家好!我是李芳,我今年大家好!我是李芳,我今年22岁岁v 测试类通过调用setter方法,为对象的各个属性赋值Java面向对象程序设计

17、小结小结 4v 使用private关键字修饰某个成员变量后,这个成员变量可以被同一包中的其它类访问吗?v 在Java程序中,代码封装带给我们的好处是什么?Java面向对象程序设计小结小结5v 请通过代码封装,实现如下需求:编写一个类Book,代表教材:具有属性:名称(具有属性:名称(title)、页数()、页数(pageNum),其中页数不),其中页数不能少于能少于200页,否则输出错误信息,并赋予默认值页,否则输出错误信息,并赋予默认值200为各属性设置赋值和取值方法为各属性设置赋值和取值方法具有方法具有方法:detail,用来在控制台输出每本教材的名称和页数,用来在控制台输出每本教材的名称

18、和页数编写测试类BookTest进行测试:为Book对象的属性赋予初始值,并调用Book对象的detail方法,看看输出是否正确Java面向对象程序设计为什么需要构造方法为什么需要构造方法 2-1v开发教员类Teacher4,要求: 具有属性:姓名、年龄、学历、职位 具有行为:自我介绍public class Teacher4 private String name; / 姓名姓名private int age; / 年龄年龄private String education; / 学历学历private String position; / 职位职位public String introduc

19、tion() return 大家好!我是大家好!我是 + name + ,我今年,我今年” + age + 岁,学历岁,学历“ +education+,目前职位是,目前职位是+position;public String getName() return name;public void setName(String myName) name = myName;/ 以下是其他属性的以下是其他属性的setter、getter方法,此处省略方法,此处省略Java面向对象程序设计为什么需要构造方法为什么需要构造方法 2-2v编写一个测试类,要求: 实例化一个教员对象,并对其初始化 在控制台输出该教员

20、的自我介绍public class Teacher4Test public static void main(String args) Teacher4 teacher = new Teacher4();teacher.setName(李芳李芳);teacher.setAge(23);teacher.setEducation(本科本科);System.out.println(roduction();要简化对象初始化的代码,可以通过构造方法来解决要简化对象初始化的代码,可以通过构造方法来解决 大家好!我是李芳大家好!我是李芳,我今年我今年23岁,学历本科,目前职位是岁,学历

21、本科,目前职位是nullAccpTeacher4中有太多中有太多的属性及对应的的属性及对应的setter方方法,在初始化时,很容易法,在初始化时,很容易就忘记了,有没有可能简就忘记了,有没有可能简化对象初始化的代码?化对象初始化的代码?Java面向对象程序设计什么是构造方法什么是构造方法v构造方法负责对象成员的初始化工作,为实例变量赋予合适的初始值v构造方法必须满足以下语法规则:1、方法名与类名相同2、没有返回类型public class Teacher5 private String name; / 教员姓名教员姓名/ 构造方法构造方法public Teacher5() name = 无名氏

22、无名氏;public class Teacher5Test public static void main(String args) Teacher5 teacher = new Teacher5();v使用new关键字调用构造方法Java面向对象程序设计带参数的构造方法带参数的构造方法 2-1v通过带参数的构造方法,显式地为实例变量赋予初始值 public class Teacher6 private String name; / 教员姓名教员姓名private int age; / 年龄年龄private String education; / 学历学历private String pos

23、ition; / 职位职位/ 带参数的构造方法带参数的构造方法public Teacher6(String pName,int pAge,String pEducation,String pPosition) name = pName;age = pAge; / 可以增加对可以增加对age等属性的存取限制条件等属性的存取限制条件education = pEducation;position = pPosition;public String introduction() return 大家好!我是大家好!我是 + name + ,我今年,我今年 + age + 岁,学历岁,学历 + educa

24、tion + ,目前职位是目前职位是+position;Java面向对象程序设计带参数的构造方法带参数的构造方法 2-2v通过调用带参数的构造方法,简化对象初始化的代码public class Teacher6Test public static void main(String args) Teacher6 teacher = new Teacher6(李芳李芳, 23, 本科本科, 咨询师咨询师);System.out.println(roduction();创建对象时,一并完成了对创建对象时,一并完成了对象成员的初始化工作象成员的初始化工作大家好!我是李芳大家好!我

25、是李芳,我今年我今年23岁,学历本科,目前职位是咨询师岁,学历本科,目前职位是咨询师Java面向对象程序设计小结小结 6编写一个类Book2,代表教材:具有属性:名称(具有属性:名称(title)、页数()、页数(pageNum),其中页),其中页数不能少于数不能少于200页,否则输出错误信息,并赋予默认值页,否则输出错误信息,并赋予默认值200具有方法:具有方法: detail,用来在控制台输出每本教材的名称和,用来在控制台输出每本教材的名称和页数。页数。具有带参数的构造方法:用来完成对象的初始化工作,具有带参数的构造方法:用来完成对象的初始化工作,并在构造方法中完成对页数的最小值限制并在构

26、造方法中完成对页数的最小值限制编写测试类Book2Test进行测试:初始化一个Book2对象,并调用该Book2对象的detail方法,看看输出是否正确Java面向对象程序设计生活中的方法重载生活中的方法重载类类方法方法方法参数方法参数方法实现方法实现司机司机 轿车轿车 巴士巴士 火车火车 驾驶驾驶启动、行驶、启动、行驶、等待乘客上车、启动、等待乘客上车、启动、行驶、到站停车、行驶、到站停车、正点发车、行驶、正点发车、行驶、到站停车、到站停车、如果用代码实现,我们需要三个方法,这些方法的方法名称如果用代码实现,我们需要三个方法,这些方法的方法名称相同,参数类型不同相同,参数类型不同 Java面

27、向对象程序设计方法重载的代码示例方法重载的代码示例 1v方法重载并不陌生vjava.io.PrintStream类的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);PrintStreamprintln(int)println(char)println

28、(String)方法名相同,参数类型不同方法名相同,参数类型不同调用不同的调用不同的println方法方法方法重载方法重载Java面向对象程序设计方法重载的代码示例方法重载的代码示例 2vjava.lang.Math类的max()方法能够从两个数字中取出最大值,它有多种实现方式v运行时,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

29、(String args) Math.max(1,2);Math.max(1.0F,2.F);Math.max(1.0,2);方法重载方法重载Java面向对象程序设计构造方法重载构造方法重载 2-1v构造方法重载是方法重载的典型示例public class Teacher7 private String name; / 教员姓名教员姓名private String school = 北京中心北京中心; / 所在中心所在中心public Teacher7(String name) = name; /设定教员姓名设定教员姓名public Teacher7(String name, String s

30、chool) = name; /设定教员姓名设定教员姓名this.school = school; /设定教员的所在中心设定教员的所在中心public String introduction() return 大家好!我是大家好!我是 + school + 的的 + name ;构造方法重载构造方法重载Java面向对象程序设计构造方法重载构造方法重载 2-2v通过调用不同的构造方法来表达对象的多种初始化行为v例如: 默认情况下,教师来自北京中心,初始化时,只需提供教员姓名 有时,需要提供所在中心名称及教员姓名public class Teacher7Test public static voi

31、d main(String args) Teacher7 teacher1 = new Teacher7(李芳李芳);System.out.println(roduction();Teacher7 teacher2 = new Teacher7(张欣张欣, 天津中心天津中心);System.out.println(roduction();大家好!我是北京中心的李芳大家好!我是北京中心的李芳大家好!我是天津中心的张欣大家好!我是天津中心的张欣Java面向对象程序设计小结小结 7v 编写一个类Book3,代表教材:具有属性:名称(title)、页数(

32、pageNum)、种类(type)具有方法:detail,用来在控制台输出每本教材的名称、页数、种类具有两个带参构造方法:第一个构造方法中,设置教材种类为“计算机”(固定),其余属性的值由参数给定;第二个构造方法中,所有属性的值都由参数给定v 编写测试类Book3Test进行测试:分别以两种方式完成对两个Book3对象的初始化工作,并分别调用它们的detail方法,看看输出是否正确Java面向对象程序设计给定如下Java代码,请指出代码中的错误,并解释原因。public class Sample private int x;public Sample() x = 1;public Sample

33、(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=i+; private void Sampla(int i)x=i+; 总结总结无参构造方法无参构造方法带参构造方法带参构造方法不是构造方法不是构造方法带参构造方法带参构造方法带参构造方法带参构造方法名称与类名不相同名称与类名不相同不是构造方法不是构造方法Java面向对象程序设计生活中的继承生活中的继承 2-1v生活中,继

34、承的例子随处可见动物动物食草动物食草动物食肉动物食肉动物谁是父类?谁是父类?谁是子类?谁是子类?能说出继承的特点吗?能说出继承的特点吗?继承需要符合的关系:继承需要符合的关系:is-a,父类更通用、子类更具体,父类更通用、子类更具体Java面向对象程序设计生活中的继承生活中的继承 2-2v子类具有父类的一般特性(包括属性和行为),以及自身特殊的特性巴士是汽车吗?巴士是汽车吗?卡车是汽车吗?卡车是汽车吗?出租车是汽车吗?出租车是汽车吗?最大载客数量最大载客数量报站报站引擎数量引擎数量外观颜色外观颜色刹车刹车加速加速汽车汽车最大载重量最大载重量卸货卸货所属公司所属公司最大载客数量最大载客数量打发票

35、打发票属性属性行为行为请问:出租车请问:出租车包含哪些属性包含哪些属性和行为呢?和行为呢?Java面向对象程序设计为什么需要继承为什么需要继承 4-1v开发ACCP教员类,其中教员分为Java教员以及.NET教员,各自的要求如下: Java教员 属性:姓名、所属中心属性:姓名、所属中心 方法:授课(步骤:打开方法:授课(步骤:打开Eclipse、实施理论课授课)、自我、实施理论课授课)、自我介绍介绍 .NET教员 属性:姓名、所属中心属性:姓名、所属中心 方法:授课(步骤:打开方法:授课(步骤:打开Visual studio 2005、实施理论课授、实施理论课授课)、自我介绍课)、自我介绍Ja

36、va面向对象程序设计v请问:以下这个解决方案中存在着什么问题?为什么需要继承为什么需要继承 4-2public class AccpDotNetTeacher private String name; / 教员姓名教员姓名private String school; / 所在中心所在中心public AccpDotNetTeacher(String myName, String mySchool) name = myName; school = mySchool;public void giveLession()System.out.println(启动启动 Visual Studio 200

37、5);System.out.println(知识点讲解知识点讲解);System.out.println(总结提问总结提问); public void introduction() System.out.println(大家好!我是大家好!我是 + school + 的的 + name + .); public class AccpJavaTeacher private String name; / 教员姓名教员姓名private String school; / 所在中心所在中心public AccpJavaTeacher(String myName, String mySchool) na

38、me = 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, only once”的原则的原则 Java面向对象程序设计为什么

39、需要继承为什么需要继承 4-3v如何改进?有没有可能建立继承关系,让子类自动继承父类的属性和方法?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(

40、知识点讲解知识点讲解);System.out.println(总结提问总结提问); public void introduction() System.out.println(大家好!我是大家好!我是“ + school + 的的 + name + 。); 现在,所有子类中相同的代码现在,所有子类中相同的代码都抽取到父类中了都抽取到父类中了 属属性性行行为为姓名姓名所在中心所在中心授课授课自我介绍自我介绍教员教员Java教员教员.NET教员教员Java面向对象程序设计为什么需要继承为什么需要继承 4-4public class AccpJavaTeacher2 extends AccpTeac

41、her 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

42、 void giveLesson()System.out.println(启动启动 Visual Studio .NET);super.giveLesson();使用继承,可以有效实现代码复用使用继承,可以有效实现代码复用子类自动继承父类的属性子类自动继承父类的属性和方法,子类中不再存在和方法,子类中不再存在重复代码重复代码Java面向对象程序设计如何实现继承如何实现继承 3-1v在Java语言中,用extends关键字来表示一个类继承了另一个类,例如:public class AccpJavaTeacher2 extends AccpTeacher /其余代码省略其余代码省略v在父类中只定义

43、一些通用的属性与方法,例如:public class AccpTeacher private String name; / 教员姓名教员姓名private String school; / 所在中心所在中心public AccpTeacher(String myName, String mySchool) /初始化属性值初始化属性值public void giveLesson() /授课方法的具体实现授课方法的具体实现 public void introduction() /自我介绍方法的具体实现自我介绍方法的具体实现 Java面向对象程序设计如何实现继承如何实现继承 3-2v子类自动继承父类

44、的属性和方法,子类中可以定义特定的属性和方法public class AccpTeacher private String name; / 教员姓名教员姓名private String school;/ 所在中心所在中心public AccpTeacher (String myName, String mySchool) /初始化属性值初始化属性值public void giveLesson() /授课方法的具体实现授课方法的具体实现 public void introduction() /自我介绍方法的具体实现自我介绍方法的具体实现 public class AccpJavaTeacher2

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

46、属性和方法可父类中的属性和方法可以被子类继承以被子类继承Java面向对象程序设计public class AccpJavaTeacher2 extends AccpTeacher public AccpJavaTeacher2(String myName, String mySchool) super(myName, mySchool);如何实现继承如何实现继承 3-3v子类的构造方法中,通过super关键字调用父类的构造方法v方法重写后,通过super关键字调用父类的方法public class AccpJavaTeacher2 extends AccpTeacher public void

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

48、ct的所有方法的所有方法Java面向对象程序设计小结小结 8v请编码实现动物世界的继承关系: 动物(Animal)具有行为:吃(eat)、睡觉(sleep) 动物包括:兔子(Rabbit),老虎(Tiger) 这些动物吃的行为各不相同(兔子吃草,老虎吃肉);但睡觉的行为是一致的。v请通过继承实现以上需求,并编写测试类AnimalTest进行测试。 Java面向对象程序设计为什么需要多态为什么需要多态 5-1v 在ACCP教员类的基础上,开发一个类代表总部,负责对各教员进行评估,评估内容包括: 1、教员的自我介绍 2、教员的授课Java面向对象程序设计为什么需要多态为什么需要多态 5-2publ

49、ic class HQ1 public void judge(AccpJavaTeacher2 t)roduction();t.giveLesson();public void judge(AccpDotNetTeacher2 t)roduction();t.giveLesson();public static void main(String args) HQ1 hq = new HQ1();hq.judge(new AccpJavaTeacher2(李明李明,北京中心北京中心“);hq.judge(new AccpDotNetTeacher2(张明张明,天津中心天津中心

50、“);v第一种解决方案大家好!我是北京中心的李明大家好!我是北京中心的李明.启动启动 Eclipse知识点讲解知识点讲解总结提问总结提问大家好!我是天津中心的张明大家好!我是天津中心的张明.启动启动 Visual Studio 2005知识点讲解知识点讲解总结提问总结提问Java面向对象程序设计为什么需要多态为什么需要多态 5-3v现在,升级ACCP教员类,增加一种新类型:AccpDBTeacher,该类型的教员专门负责教授数据库,要求如下: 属性:姓名、所属中心 方法:授课(启动Sql Server、实施理论课授课)、自我介绍v同时,总部也负责对这类教员进行评估Java面向对象程序设计为什么

51、需要多态为什么需要多态 5-4v 如果在第一种解决方案的基础上去解决,我们需要如下两个步骤:建立AccpDBTeacher类修改总部类,增加方法:judge(AccpDBTeacher t)每增加一种新的教员类型,都要修改总部类,增加相应的每增加一种新的教员类型,都要修改总部类,增加相应的judge(评估评估)方法,代码的可扩展性及可维护性极差方法,代码的可扩展性及可维护性极差 能找到这个解决方案的弊端吗?能找到这个解决方案的弊端吗?Java面向对象程序设计为什么需要多态为什么需要多态 5-5v第二种解决方案使用多态public class HQ3 public void judge(Accp

52、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(“李岚李岚,北京中心北京中心“);可以接收子类类型可以接收子类类型根据实际创建的对象根据实际创建的对象类型调用相应方法类型调用相应方法大家好!我是北京中心的李明大家

53、好!我是北京中心的李明.启动启动 Eclipse知识点讲解知识点讲解总结提问总结提问大家好!我是天津中心的张明大家好!我是天津中心的张明.启动启动 Visual Studio 2005知识点讲解知识点讲解总结提问总结提问大家好!我是北京中心的李岚大家好!我是北京中心的李岚.启动启动 Sql Server知识点讲解知识点讲解总结提问总结提问控制台输出控制台输出使用多态之后,当需要增加新的子类类型时,无需更改总部类,程序的可扩展性及可维护性增强 Java面向对象程序设计什么是多态什么是多态v 简单来说,多态是具有表现多种形态的能力的特征 v 同一个实现接口,使用不同的实例而执行不同操作彩色打印机彩

54、色打印机 打印机打印机 黑白打印机黑白打印机打印效果:彩色打印效果:彩色打印效果:黑白打印效果:黑白打印打印 打印打印 Java面向对象程序设计public class AccpTeacher public void giveLesson() System.out.println(知识点讲解知识点讲解); System.out.println(总结提问总结提问); public class Test public static void main(String args) HQ3 hq = new HQ3(); hq.judge(new AccpDBTeacher(); 3如何实现多态如何实现

55、多态1、子类重写父类的方法、子类重写父类的方法2、编写方法时,使用父类定义的方法、编写方法时,使用父类定义的方法3、运行时,根据实际创建的对象类型动态决定使用哪个方法、运行时,根据实际创建的对象类型动态决定使用哪个方法public class AccpDBTeacher extends AccpTeacher public void giveLesson() System.out.println(启动启动 SqlServer); super.giveLesson(); 1public class HQ3 public void judge(AccpTeacher t) t.giveLesson

56、(); 2Java面向对象程序设计小结小结 9v请编码实现如下需求: 乐器(Instrument)分为:钢琴(Piano)、小提琴(Violin) 各种乐器的弹奏( play )方法各不相同。v编写一个测试类InstrumentTest,要求: 编写方法testPlay,对各种乐器进行弹奏测试。要依据乐器的不同,进行相应的弹奏。 在main方法中进行测试Java面向对象程序设计总结总结 2-1class Base public String name;public Base()name = Base;public Base(String pName)name = pName;public vo

57、id 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 控制台输出控制台输出123Java面向对象程序设计总结总结 2-2给定如下Java代码,编译运行后,输出结果是什么?public class AccpT

58、eacher public void giveLesson()System.out.println(知识点讲解知识点讲解);public class AccpDBTeacher extends AccpTeacher public void giveLesson()System.out.println(启动启动 SqlServer);12public class Test public static void main(String args) AccpTeacher t = new AccpDBTeacher ();t.giveLesson(); 控制台输出控制台输出 启动启动 SqlSer

59、ver Java面向对象程序设计为什么需要包为什么需要包v生活案例生活案例 文档分门别类,易于查找文档分门别类,易于查找 不同内容的文档可以放在不同的不同内容的文档可以放在不同的 袋子中,拥有相同的名字,避免冲突袋子中,拥有相同的名字,避免冲突 易于管理易于管理 Java面向对象程序设计允许类组成较小的单元(类似允许类组成较小的单元(类似文件夹),易于找到和使用相文件夹),易于找到和使用相应的文件应的文件 防止命名冲突防止命名冲突 更好的保护类、数更好的保护类、数据和方法据和方法 A.java包包为什么需要包为什么需要包Java面向对象程序设计 Java的系统程序包的系统程序包Java 常用类

60、库常用类库API 包包功能功能java.lang包含包含java语言的核心类库语言的核心类库java.util提供各种实用工具类提供各种实用工具类java.io标准输入标准输入/输出类输出类java.awt组件标准组件标准GUI,包含了众多的图形组件、方法和事件,包含了众多的图形组件、方法和事件java.applet提供对通用提供对通用Applet的支持,是所有的支持,是所有Applet的基类的基类实现实现java网络功能的类库网络功能的类库java.sql支持支持java程序的数据库访问和处理程序的数据库访问和处理Java面向对象程序设计如何创建包如何创建包package myjava.sg

温馨提示

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

评论

0/150

提交评论