day17---多态

多态:多种形态,理解多态一定要结合继承关系来理解,可以说没有继承就没有多态
    因此也可以说多态其实就是对象的多种类型
多态的目的:提高代码/系统的扩展性!

    定义:同一个引用类型,使用不同的实例/对象而执行不同操作
    同类型的对象,执行同一个行为,会表现出不同的行为特征(使用不同的实现逻辑)
    父类类型,使用子类对象,然后调用子类重写父类的方法(父类引用指向子类对象)

父类作为方法形参时,在调用该方法时,实际传入的对象是什么类型,就调用的是谁里面的方法
例子:
    父亲买了一个快递,过了几天,快递到了,但是父亲出差在外地
    父亲有三个孩子:哥哥、弟弟、妹妹
    现在哥哥、弟弟、妹妹都可以代替父亲去取快递
    也就是说,真正取快递时,用的是谁的取快递的方法?————孩子的方法
    若父亲没有取快递的方法,就好比父亲压根没买东西,孩子当然不能用父亲的名义取快递
    只能用自己的名义取快递,而且只能取自己的快递!

多态的优势和应用场合

实现多态的三个要素
    子类继承父类:
        子类要使用父类的类型来调用相关方法
    子类重写父类方法:
        子类重写父类的方法的目的:提高代码的可扩展性
        子类如果不重写父类的方法,那么在使用父类类型的子类对象时,就无法调用真正要使用的子类中的方法
    父类引用指向子类对象:
        真正意义上使用多态的方式来执行程序
        对象是子类的对象,但是是由父类的类型来声明的
            父类类型 对象名 = new 子类构造方法();
                声明创建一个宠物,实际上用的是狗子的狗子的构造方法创建的宠物对象
            父类作为形参,传入的实参是子类的对象
            父类作为返回值,返回的实际是子类的对象
只要子类重写了父类的方法,不管用的是父类引用还是子类引用,调用的都是子类重写过的方法
父类引用指向子类对象,可以调用父类独有的方法
    父类引用指向子类对象,可以调用父类中所有方法(特殊访问修饰符权限除外),
    但是如果该方法被子类重写时,调用的就是子类重写过的方法
父类引用指向子类对象时,就不再能调用子类独有的方法
    子类独有的方法:子类有该方法,而父类中没有该方法

父类引用指向子类对象满足自动类型转换
    =表示赋值运算符,表示将=右边的值赋值给=左边
    =左边是目标类型,=右边是源类型
自动类型转换需要满足:目标类型大于源类型,
在多态中,自动类型转换也可以叫做向上转型(将子类的对象用父类的类型表示出来)

程序遵循:实现的难易守恒!——————周老师定理!
    一方简易,另一方必然复杂——————复杂度是守恒的

实现多态的两种形式:
    父类作为方法形参实现多态(提高实现方的扩展性)
        这样子可以只定义一个方法,而不需要为每个子类的对象都定义一个方法,提高代码的可重用性
        而且后续再扩展其它子类时,也不需要再添加新的方法,这样可以提高代码的扩展性
    父类作为返回值实现多态(提高调用方的扩展性)
        在实现的方法中,将子类的对象以父类类型返回,这样在调用者方就不用关心具体如何实现
        调用者只需要在调用者方根据不同的需求就能得到想要的对象,
        即使再扩展了新的子类,调用者方也不需要添加新的实现,这样可以提高代码的扩展性


父类和子类之间的类型转换

理解父类引用指向子类对象(重点)
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值