面向对象编程08继承和多态.ppt

上传人:wuy****n92 文档编号:92005659 上传时间:2023-05-30 格式:PPT 页数:24 大小:723.50KB
返回 下载 相关 举报
面向对象编程08继承和多态.ppt_第1页
第1页 / 共24页
面向对象编程08继承和多态.ppt_第2页
第2页 / 共24页
点击查看更多>>
资源描述

《面向对象编程08继承和多态.ppt》由会员分享,可在线阅读,更多相关《面向对象编程08继承和多态.ppt(24页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第四章第四章 面向面向对象象编程程本章主要内容本章主要内容4.1 简介 4.2 面向对象的基本概念 4.3 面向对象的基本语法 4.4 类和包4.5 类的方法4.6 对象4.7 继承和多态4.8 接口和抽象类4.9 面向对象开发概念 定义类的方法的步骤是什么?类中的一个方法如何调用类的另一个方法?类中的一个方法如何调用另一个类的方法?分别说明成员变量和局部变量的作用域。如何给类的方法添加JavaDoc注释?课程回程回顾本章目本章目标掌握继承掌握super关键字掌握多态4.6 继承和多承和多态计算机语言设计犹如在公园里漫步。我是说侏罗纪公园。Larry Wall(Perl 语言之父)生活中的生活

2、中的继承承生活中,继承的例子随处可见动物食草动物食肉动物谁是父类?谁是子类?能说出继承的特点吗?继承需要符合的关系:is-a,父类更通用、子类更具体生活中的生活中的继承承子类具有父类的一般特性(包括属性和行为),以及自身特殊的特性巴士是汽车吗?卡车是汽车吗?出租车是汽车吗?最大载客数量报站引擎数量外观颜色刹车加速汽车最大载重量卸货所属公司最大载客数量打发票属性行为请问:出租车包含哪些属性和行为呢?4.6.1 类和和类的的继承承类的设计其实是对现有世界的模仿在继承中,一般常见的有属性继承,属性隐藏,方法继承,方法覆盖,方法重载等技术。在Java语言中,用extends关键字来表示一个类继承了另一

3、个类在父类中只定义一些通用的属性与方法子类自动继承父类的属性和方法,子类中可以定义特定的属性和方法子类的构造方法中,通过super关键字调用父类的构造方法方法重写后,通过super关键字调用父类的方法在Java 中,所有的Java类都直接或间接地继承了类如何实现继承 3-1在Java语言中,用extends关键字来表示一个类继承了另一个类,例如:public class Woman extends Human/其余代码省略其余代码省略在父类中只定义一些通用的属性与方法,例如:public class Human private String name;private String school

4、;public Human(String name,String sex,int age)/初始化属性值初始化属性值public void canEat()public void breath()如何实现继承 3-2子类自动继承父类的属性和方法,子类中可以定义特定的属性和方法public class Humanprivate String name;/教员姓名教员姓名private String sex;/所在中心所在中心public Human(String myName,String mySex)/初始化属性值初始化属性值public void sayHello()/方法的具体实现方法的具

5、体实现public class Father extends Human public Father(String myName,String mySex)super(myName,mySex);public void sayHello()(“你好,我是爸爸你好,我是爸爸);super.sayHello();由于由于sayHello()方法与父类的实方法与父类的实现有所不同,因此重写了该方现有所不同,因此重写了该方法法 方法重写:子类和父类的方法具有相同的名称、参数列表、返回类型方法重写:子类和父类的方法具有相同的名称、参数列表、返回类型 父类中的属性和方法可以被父类中的属性和方法可以被子类继

6、承子类继承public class Father extends Human public Father(String myName,String mySex)super(myName,mySex);如何实现继承 3-3子类的构造方法中,通过super关键字调用父类的构造方法方法重写后,通过super关键字调用父类的方法public class Father extends Human public void sayHello()(“你好,我是爸爸你好,我是爸爸);super.sayHello();通过调用父类的构造方法,完成通过调用父类的构造方法,完成对属性值的初始化对属性值的初始化一切类的

7、“祖先”Object在Java 中,所有的Java类都直接或间接地继承了类public class MyObject /public class MyObect extends Object /在在Eclipse中调用中调用MyObject对象对象的成员,会自动弹出继承自的成员,会自动弹出继承自Object的所有方法的所有方法4.6.1 类和和类的的继承承函数的覆盖和重载的区别4.6.1 类和和类的的继承承重载的情况下,子类的访问权限比父类要大。参看课本例4.15 Man类:用于测试Man类的程序:为什么需要多什么需要多态 5-1在Woman/Man类的基础上,开发一个类用来判断,负责对Wom

8、an、Man中的方法进行判断:1、打招呼为什么需要多态 5-2第一种解决方案public class Judge public void judge(Man man)man.sayHello();man.isFather();public void judge(Woman woman)woman.sayHello();woman.isMother();public static void main(String args)Man lisi=new Man(李四李四,男男);Woman lili=new Woman(李丽李丽,女女);Judge judge=new Judge();judge.j

9、udge(lisi);judge.judge(lili);我继承于Human类,是个男性大家好,我是李四,是个男人我继承于Human类,是个女性大家好,我是李丽,是个女人控制台输出控制台输出为什么需要多态 5-3现在,升级人类,增加一种新类型:Boy同时,Judge也负责对这类进行评估为什么需要多态 5-4如果在第一种解决方案的基础上去解决,我们需要如下两个步骤:建立Boy类修改Judge类,增加方法:judge(Boy boy)每增加一种新的人类型,都要修Judge类,增加相应的judge(评估)方法,代码的可扩展性及可维护性极差 能找到这个解决方案的弊端吗?能找到这个解决方案的弊端吗?为什

10、么需要多态 5-5第二种解决方案使用多态public class JudgeAll public void judge(Human human)human.sayHello();public static void main(String args)JudgeAll judgeall=new JudgeAll();judgeall.judge(lisi);judgeall.judge(lili);judgeall.judge(xiaoming);可以接收子类类型可以接收子类类型根据实际创建的对象类型根据实际创建的对象类型调用相应方法调用相应方法我继承于Human类,是个男性大家好,我是李四,是

11、个男人我继承于Human类,是个女性大家好,我是李丽,是个女人我继承于Human类,是个男孩,还没有成年控制台输出控制台输出使用多态之后,当需要增加新的子类类型时,无需更改Judge类,程序的可扩展性及可维护性增强 什么是多态简单来说,多态是具有表现多种形态的能力的特征同一个实现接口,使用不同的实例而执行不同操作彩色打印机彩色打印机 打印机打印机 黑白打印机黑白打印机打印效果:彩色打印效果:彩色打印效果:黑白打印效果:黑白打印打印 打印打印 public class Human public void sayHello()(大家好,我是+name+,是个+sex+人);public class

12、 Test public static void main(String args)JudgeAll judgeall=new JudgeAll();judgeAll.judge(new Boy();3如何实现多态1、子类重写父类的方法2、编写方法时,使用父类定义的方法3、运行时,根据实际创建的对象类型动态决定使用哪个方法public class Boy extends Human public void sayHello()System.out.println(我继承于Human类,是个男孩,还没有成年);1public class JudgeAll public void judge(Hu

13、man human)human.sayHello();2总结 2-1给定如下Java代码,编译运行后,输出结果是什么?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 Basepublic Child()super(Child1);name=Child2;public class Sample public static void main

14、(String args)Child c=new Child();c.method();Child2 控制台输出控制台输出123总结 2-2给定如下Java代码,编译运行后,输出结果是什么?public class Human public void sayHello()System.out.println(“你好,我是人类你好,我是人类);public class Boy extends Humanpublic void sayHello()System.out.println(“你好,我是男孩你好,我是男孩);12public class Test public static void m

15、ain(String args)Human t =new Boy();t.sayHello();控制台输出控制台输出 你好,我是男孩你好,我是男孩4.6.2 类的运行的运行时多多态当不同的对象接受到相同的消息名(或者说当不同的对象调用相同的名称的成员函数)时,可能引起不同的行为(执行不同的的代码)。这种现象称为多态性.多态包括编译时多态和运行时多态两种。编译时多态和运行时多态的区别。编译时的多态,是指参数列表的不同,来区分不同的函数,在编译后,就自动变成两个不同的函数名.在运行时谈不上多态。运行时多态:用到的是后期绑定的技术,在程序运行前不知道,会调用那个方法,而到运行时,通过运算程序,动态的算出被调用的地址.动态调用在继承的时候,方法名 参数列表完全相同时才出现运行时多态

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com