- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第5章继承和多态讲解
5.4 多态性 (3)如果方法是private、static、final或者是构造器,编译器可以确定调用的方法,这种方法是静态调用。与之对应,调用方法将依赖于隐式参数的实际类型,并且在运行时动态绑定。 (4)当程序运行并且使用动态绑定来调用一个方法时,那么虚拟机必须调用同x所指向的对象的实际类型相匹配的方法版本。 5.4 多态性 2.方法的重载 重载(Overloading)实质上就是在一个类内用一个标识符定义不同的方法或符号运算的方法名或符号名。Java语言中支持符号的重载,如前提及的运算符“+”。不过Java语言中不支持用户自定义的符号重载,可以支持用户定义方法的重载。 方法的重载具体可以理解为,同一个方法名对应不同的方法定义。这些方法的格式说明中的参数不同,即,具体涉及到参数的类型、参数的个数是有所不同的。 重载的例:定义一个计数器可以实现求数的绝对值运算.见程序清单Counter.java 5.4 多态性 3.方法的覆盖和隐藏 方法的覆盖(Overriding)实质是指子类具有重新定义父类成员方法的能力。这种重新定义表示子类定义的方法具有和父类的方法同名称、同参数类型、同参数个数、以及同返回值。方法格式定义尽管相同,但具有不同的方法体,实现的内容根据程序员的要求而有所不同。 子类的方法覆盖父类的同名方法。这意味着,子类对象的实例方法调用只会调用子类中定义的方法,而不是父类中同格式说明的方法。 如果子类的方法覆盖父类的静态方法,则父类的方法在子类中隐藏起来了 . 5.4 多态性 重载 覆盖 重载方法补充彼此 覆盖方法替代它已覆盖的方法 重载方法参数表中可有不同类型的参数 覆盖方法的参数表必须有相同类型相同顺序的参数 重载方法的返回值可以不同 覆盖方法的返回值必须相同 重载方法实际上是不同的方法,可以抛出不同的异常 覆盖方法抛出原方法中能抛出的已检查的异常 表5-1重载和覆盖的比较 5.4 多态性 4.数据成员的隐藏 父类的数据成员可以在子类中隐藏,只要子类中定义了同名的数据成员。即使数据成员的类型不同,也视为父类的数据成员被隐藏了。 5.4 多态性 super关键字 super关键字表示对类的父类的引用。在子类中有时会使用父类的数据和方法,这时就可以利用super关键字来实现对父类的引用。super关键字不是一个对象的引用,而是调用父类的成员特有的关键字。 super关键字主要应用在两个方面: 1)应用于引用父类的构造方法; 2)应用于引用父类中被子类覆盖的成员方法和隐藏数据成员。 5.4 多态性 5.运行多态性的实现 利用继承机制实现多态性 利用接口实现多态性 5.4 多态性 (1)利用继承机制实现多态性 对于数据来说,继承是否为正确的设计可以用一个简单的规则来判断。“is-a”规则表明子类的每一个对象都是一个超类的对象。例如,每一个经理是一个员工。然而,只有经理类是员工类的子类才是有意义的。很明显,反过来就不行了——并不是每个员工都是经理。 还有一个明确叙述“is-a”规则的方法是替代原则。该原则规定无论何时,如果程序需要一个超类对象,都可以用一个子类对象来代替 5.4 多态性 例:定义一个抽象类ParentClass和该类的子类ChildClass,以及定义一个测试类Test.它们的程序请单见ParentClass.java,ChildClass.java和Test.java.运行结果见图5-4. 思考:在程序Test.java中,观察语句“ParentClass cc=new ChildClass(); ”,思考对象cc每次调用showMessage()方法各是哪个类的方法? 图5-3 5.4 多态性 (2).利用接口实现多态性 接口的灵活性就在于“规定一个类必须做什么,而不管你如何做”。我们可以定义一个接口类型的引用变量来引用实现接口的类的实例,当这个引用调用方法时,它会根据实际引用的类的实例来判断具体调用哪个方法,这和上述利用父类的对象引用访问子类对象的机制相似。 5.4 多态性 例:定义一个接口Workable和实现该接口的抽象类Person,以及Person的子类Student、Teacher,以及定义反映执行任务的Task类和测试任务类TaskTest.它们之间的关系见图5-5, 它们的程序请单见Workable.java,Person.java , Student.java ,Teacher.java,Task.java和TaskTest.java.运行结果见图5-6. 图5-5 图5-6 本章小结 Java是一个面向对象程序设计语言,具有封装性、继承性和多态性。继承是体现了类定义的扩展,有效的支持了代码复用,充分表现了面向对象程序设计的灵活
您可能关注的文档
最近下载
- 变电设备检修工职业认证隔离开关主刀闸工作原理GW23B-126型隔离开关说明书.pdf VIP
- QB1696-1993啤酒麦芽附录A比重与浸出物含量对照表.pdf VIP
- 《先兆流产》课件.ppt VIP
- (2025秋新版)部编版二年级语文上册全册PPT课件.pptx
- 清洁设备操作及日常保养标准作业规程.doc VIP
- 2025年高中政治必修同步课时练 必修一 第一课 周练过关(一).pdf VIP
- 2025年中考备考:人教版九年级物理上册全书课后练习答案.docx VIP
- 班级卫生值日表模板.xlsx VIP
- 深基坑开挖及支护施工专项方案.doc VIP
- 学习2025《初中生自我介绍》专题课件ppt.pptx VIP
文档评论(0)