Java笔试|面试 —— 对多态性的理解

谈谈对多态性的理解:

一个事物的多种形态(编译和运行时状态不一致性)

实现机制:通过继承、重写和向上转型(Object obj = new 子类())来实现。

1.广义上的理解

  • 子类对象的多态性,方法的重写;方法的重载;

    • 子类对象的多态性:编译时是父类对象,运行时是不确定的子类对象。(体现不一致性)

    • 方法的重写:继承父类后方法的重写,子父类方法不一致。(体现不一致性)

    • 方法的重载:方法的多态性(方法名一样,形参列表不一样,表现出不同形态,即多态性)(没有体现出状态不一致性)

2.狭义上的理解

  • Java中多态性主要指:子类对象的多态性

    • 格式:

      Object obj = new Xx(...); 父类的引用指向子类的对象 4

      Object obj = new String("hell!");

      Person per = new Man(); 声明是父类,实际new的子类对象

3.多态的优点

  • 减少了大量的重载的方法的定义;开闭原则( 对扩展开放,对修改关闭<无修改> )

    • 方法的主要使用场景

      应用于方法的形参()中,形参类型无法确定,写为父类,而实际调用方法时传递的是各种各样的子类。不需要再写各种重载的方法,直接写一个父类即可。(减少了大量的重载的方法的定义)

      -举例:public boolean equals(Object obj)

  • 多态无处不在(重点理解)

    • 例如开发中大量使用的抽象类和接口,其根本不能实例化,只能通过子类对象实例化,(体现为多态性)。如果子类对象不能赋值,抽象类和接口将没有任何意义。
    • 抽象类,接口就是基于多态而存在的,抽象类,接口要子类实例化。
    • 即如果没有多态,抽象类和接口将没有意义。

4.多态的使用(多态new的对象 与 不用多态new对象)

  • 多态new的对象

    • 虚拟方法调用。即"编译看左边,运行看右边"。
    • 屏蔽了子类特有的属性和方法,不能调用。
    • 一般写在形参上,因为没法确定子类是谁
  • 不用多态new对象

    • 方法里面,正常new对象即可
  • 注意:属性不存在多态性。

5.多态的逆过程

  • 向下转型,使用强转符()。
  • 为了避免出现强转时的ClassCastException,建议强转()之前使用instanceOf进行判断
相关推荐
乌鸦乌鸦你的小虎牙1 小时前
qt 5.12.8 配置报错(交叉编译环境)
开发语言·数据库·qt
无心水2 小时前
【OpenClaw:实战部署】5、全平台部署OpenClaw(Win/Mac/Linux/云服务器)——10分钟跑通第一个本地AI智能体
java·人工智能·ai·智能体·ai智能体·ai架构·openclaw
feifeigo1232 小时前
Leslie人口模型MATLAB实现(中长期人口预测)
开发语言·matlab
写代码的二次猿2 小时前
安装openfold(顺利解决版)
开发语言·python·深度学习
一只大袋鼠2 小时前
Redis 安装+基于短信验证码登录功能的完整实现
java·开发语言·数据库·redis·缓存·学习笔记
※DX3906※3 小时前
Java排序算法--全面详解面试中涉及的排序
java·开发语言·数据结构·面试·排序算法
笨笨马甲4 小时前
Qt QSS使用指南
开发语言·qt
cur1es4 小时前
【JVM类加载&双亲委派模型&垃圾回收机制】
java·jvm·gc·垃圾回收·类加载·双亲委派模型
Mr.朱鹏4 小时前
JVM-GC垃圾回收案例
java·jvm·spring boot·算法·spring·spring cloud·java-ee
挨踢学霸4 小时前
技术全面重构|MsgHelper 新版深度拆解:交互、视觉与逻辑的底层优化(二)
经验分享·笔记·微信·架构·自动化