• Java学习笔记---多态


    面向对象三大特征之一(继承,封装,多态)

    多态的应用场景:根据传递对象的不同,调用不同的show方法

    一、多态的定义

    同类型的对象,表现出的不同形态(对象的多种形态)

    二、多态的表现形式

    父类类型  对象名称=子类对象

    三、多态的前提

    • 有继承/实现关系
    • 有父类引用指向子类对象
    • 有方法重写

     四、多态的好处

    使用父类类型作为参数,可以接受所有子类对象,体现多态的扩展性与便利

    五、多态调用成员的特点

    • 变量调用:编译看左边,运行也看左边
    • 方法调用:编译看左边,运行看右边

     注:

    1.编译看左边:Javac编译的时候,会看左边的父类中有没有这个变量(方法),如果有编译成功,没有则编译失败。

    2.运行也看左边:Java运行代码的时候,实际获取的就是左边父类中成员变量的值

    3.运行看右边:Java运行代码时,实际上运行的是子类的方法

    六、多态的优势

    • 在多态形势下,右边对象可以实现解耦合,便于扩展和维护(注:解耦合是指两个或者两个以上的体系或者两种运动形式间通过互相作用而彼此影响以致联合起来的现象)
    • 定义方法时,使用父类型作为参数,可以接收所有子类对象,体现多态的扩展性与便利

    七、多态的弊端

    • 不能调用子类的特有功能(原因:当调用成员方法时,编译看左边,运行看右边,那么在编译的时候会先检查左边的父类中有没有这个方法,如果没有则直接报错)
    • 解决方案:变回子类类型  Dog  d=(Dog)a;

     扩展:instanceof关键字(作用:判断该变量是否为该类型)

    格式:变量名  instanceof   类名 

    新特性

    先判断a是否为Dog类型,如果是,则强转成Dog类型,转换之后变量名为d,如果不是,则不强转,结果直接是false

    引用数据类型的类型转换的两种方法

    自动类型转换(由小变大:Person p=new Student();)

    强制类型转换(父类强制变为子类Student s=(Student)p;)

    强制转换的作用:

    可以转换成真正的子类类型,从而调用子类独有功能

    (注:转换类型与真实对象类型不一致会报错,可以用instanceof关键字进行判断)

  • 相关阅读:
    【MacOS】常用快捷键
    TCR历史论文多久能发表?
    LuatOS-SOC接口文档(air780E)--camera - codec - 多媒体-编解码
    【Node.js】模块化:
    【动态规划】动态规划经典例题 力扣&牛客
    sql在plsql执行快,在mybatis中很慢
    基于优化的多核局部费舍尔判别分析的故障分类
    Java语言的过滤数据流
    【学生网页设计作品 】关于HTML公益主题网页设计——公益电信诈骗10页
    【教程】微信小程序导入外部字体详细流程
  • 原文地址:https://blog.csdn.net/weixin_73048230/article/details/132451597