- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
上课用多态
第3章:面向对象(高级) ——多态性 目录 什么是多态? 多态需要哪些知识基础? Java中怎样实现多态? 使用多态有什么好处? 什么是多态 简单来说,多态就是事物具有表现多种形态的能力的特征 同一个方法调用,使用不同的实例能执行不同操作 多态的知识基础 类(抽象类与接口)的定义、对象的创建 类的封装、继承 对象的向上转型 对象的向上转型 向上转型:子类对象 ? 父类对象 对于向上转型,程序会自动完成,格式: 对象向上转型:父类 父类对象 = 子类实例 ; 父类 父类对象 = new 子类构造方法() ; 接口 接口名 = 子类实例 ; 接口 接口名 = new 子类构造方法() ; 对象的向上转型 随堂练习 编写一个抽象类:图形类Shape,其中定义computeArea(float r)抽象方法 编写它的两个子类,分别是正方形Square,圆Circle,在其中实现对父类抽象方法的重写(覆写) 编写测试类Test,用父类对象的引用指向子类对象实例,用该引用去调用相应的方法,查看输出效果。 如果我们在Square中定义一个普通方法say(),看一下能否用父类对象的引用去调用。 运行时多态 运行时多态也称为动态多态,即在运行时才能确定调用哪个方法; 形成动态多态必须具体以下条件: 必须要有继承的情况存在; 在继承中必须要有方法重写; 必须有父类的引用指向派生子类的实例,并且通过父类的引用调用被重写的方法; 此外,还有方法重载这种编译时多态,也称为静态多态,即在编译时即确定调用哪个方法。 如何实现多态 1、实现继承关系(或实现接口) 2、子类重写父类的方法 3、给父类对象发消息时,只能调用父类中定义且子类重写过的方法 4、运行时根据实际创建的对象类型动态决定使用哪个方法 假设有一个类 叫 鸟类,它有方法唱歌,如下 public abstract class Bird { public abstract void sing(); } 另有两个类继承鸟类并重写sing方法,鹦鹉类: public class Parrot extends Bird { public void sing() { System.out.println(“鹦鹉的歌声); } } 麻雀类: public class Sparrow extends Bird { public void sing() { System.out.println(“麻雀的歌声); } } 然后你有个妻子她想听鸟唱歌,就有个妻子类 public class Wife { public void listen(Bird bird){ bird.sing(); } } 这时多态就很好的体现了,你妻子想听鸟唱歌,无论什么鸟都可以给她,但是你想让她听鹦鹉唱歌,你就买了一只鹦鹉传给listen方法,结果你妻子听到了鹦鹉的歌声 public static void main(String[] args) { new Wife().listen(new Parrot()); } 多态实现了动态绑定,让程序有了很好的扩展性,比如你以后想买一只燕子送给你妻子,就只需要写个燕子类Swallow继承Bird方法就可以了,而不需要再在妻子类里添加一个方法listen(Swallow swallow)。 课堂练习(续) 接前面的练习 创建一个类GraphicApp,其中有一个getArea(Shape se )方法,方法体内使用puteArea(5.8f); 在测试类中生成GraphicApp类的对象ga,调用其方法,尝试传入不同类型的对象,查看输出是否符合预期。 尝试把Shape抽象类改为实体类或接口呢? 拓展 向下转型:父类对象 ? 子类对象 对于向下转型时,必须明确的指明要转型的子类类型,格式: 对象向下转型:子类 子类对象 = (子类)父类实例 ; 对象的向下转型 注意:对象向下转型的要求 在进行对象的向下转型之前,必须首先发生对象向上转型才可以,否则将出现对象转换异常 instanceof 关键字 在java中可以使用instanceof关键字判断一个对象到底是哪个类的实例 对象 instanceof 类 ? 返回boolean类型 验证instanceof关键字的作用 在向下转型前进行验证 class A { public void fun1() { // 定义fun1()方法 System.out.println(A -- public voi
文档评论(0)