第8章 多态

本文深入探讨Java中的多态与继承概念,包括向上转型、方法调用绑定、构造器特性、协变返回类型等核心内容,并讨论了如何合理设计继承体系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

8.1 向上转型

     把某个对象的引用视为对其基类型的引用的做法被称作向上转型。

  8.1.1 忘记对象类型

     基类参数引用接受子类对象,调用成员时还是调用子类的。

8.2 转机

     基类参数引用接受子类对象,通过后期绑定来确定子类对象的真实类型。

  8.2.1 方法调用绑定

    将一个方法调用同一个方法主体关联起来,就是绑定。

    在运行前的编译和连接期进行绑定,就是前期绑定。JAVA中的static,final(private)属于这种 

    在运行时根据对象的类型进行绑定,即后期绑定或动态绑定。JAVA中其他类型的方法。

  8.2.2 产生正确的行为

     子类有重载则调子类的,没有就调基类的

  8.2.3 可扩展性

  8.2.4 缺陷:“覆盖”私有方法

    如果子类有基类private方法签名相同的方法,又使用基类引用指向子类对象进行调用此方法时,调用的会是基类的private方法。此时基类引用根本看不到子类的那个试图重载的方法,只会去找基类中方法。

    子类中最好不要有与基类private同名的方法,以免试图采用基类引用进行调用时出现调用基类的方法现象。

  8.2.5 缺陷:域与静态方法

    1)用基类引用去访问对象的域时,访问的是基类的域。即当子类的域与基类的域名称完全一致时,会分别为两个域分配不同的存储空间。

    2)如果某个方法时静态的,就不具有多态性。

    所以多态只是对public的非静态的方法而言。

8.3 构造器和多态

    构造器隐含static,所以不具有多态性。

  8.3.1 构造器的调用顺序

  8.3.2 继承与清理

    当覆盖基类的dispose()时,一定要在子类的dispose中调用基类的,否则基类的不会被清理。销毁顺序与初始化顺序相反。

  8.3.3 构造器内部的多态方法的行为

   在基类的构造器中调用子类覆盖过的方法,一定是会调用子类的方法,当子类的方法访问子类的成员时,会出现成员为0的现象。

8.4 协变返回类型(??)

    在导出类中的被覆盖方法可以返回基类方法的返回类型的某种导出类型。

8.5 用继承进行设计

    准则:用继承表达行为间的差异,用字段(组合)表达状态上的变化。

  8.5.1 纯继承与扩展

    纯继承就是子类与基类有着完全相同的接口。而扩展是子类除了重载基类的方法,还有其他新的方法。

  8.5.2 向下转型与运行时类型识别

    在运行期间对类型进行检查的行为即运行时类型识别(RTTI)。

    (除非基类是抽象类)使用基类引用指向子类对象时,除非进行向下转型,否则无法调用子类特有的方法了

    而将基类对象进行向下转型,试图调用子类特有的方法时,就会先抛出类转型异常。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值