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进行判断
相关推荐
程序员黑豆5 小时前
Java类型推断完全指南:从var到菱形运算符,掌握使用限制与最佳实践
java·前端·ai编程
风流 少年6 小时前
Spring AI 2.0:Memory
java·后端·spring
码匠许师傅6 小时前
【C++ 面试真题】聊聊 C++ 的移动语义与右值引用
java·c++·面试
2603_965148116 小时前
如何解析JSON数据?API返回的商品信息处理教程
开发语言·数据库·python·自动化·json·api
bitbrowser6 小时前
giffgaff突然停用?先分清闲置停用和长期境外断开
笔记
九硕智慧建筑一体化厂家6 小时前
数字化管控落地,直流照明构筑安全照明体系
运维·人工智能·笔记·安全·智慧城市
小席是个热心肠7 小时前
AI相关的自我学习
java·人工智能·学习
AI云海7 小时前
天幕红尘笔记
笔记
Thecozzy9 小时前
大厂 AI Coding 面试大招
人工智能·面试·职场和发展
知无不研9 小时前
lambda表达式的使用(3)
开发语言·c++·lambda