面试官:对于 Java 中多态的理解是什么?
面试官:对于 Java 中多态的理解是什么?
题目
面试官:对于 Java 中多态的理解是什么?
推荐解析
1.父类的引用指向子类的对象
子类重写父类的方法:子类可以继承父类的方法,并对其进行重写。当通过父类的引用调用这个方法时,实际执行的是子类重写后的方法。
比如 Person person = new Student Person 是父类 Student ,都有一个工作的方法,student 重写工作方法,比如上学。
class Person {void work() {System.out.println("工作");}
}class Student extends Person {@Overridevoid work() {System.out.println("上学");}
}public class Test {public static void main(String[] args) {Person person = new Student();person.work(); // 输出 "上学"}
}
2.接口的引用指向实现类的对象
1)List list = new ArrayList();
2)ArrayList list= new ArrayList()
List<String> list1 = new ArrayList<>();
ArrayList<String> list2 = new ArrayList<>();// list1.trimToSize(); // 编译错误,因为 trimToSize 是 ArrayList 的特有方法
list2.trimToSize(); // 正确,因为 list2 是 ArrayList 类型的变量
在第一种情况下,无法使用 ArrayList 特有的方法,因为声明的是一个 List 类型的变量,只能使用 List 接口中定义的方法。而在第二种情况下,声明了一个 ArrayList 类型的变量,可以使用 ArrayList 特有的方法。
3.方法的重载
方法的重载:方法重载指的是在同一个类中定义多个同名但参数列表不同的方法。在调用这个方法时,编译器会根据参数的类型和数量来确定具体调用哪个方法。
class Test {void show(int i) {System.out.println("整型数值: " + i);}void show(String s) {System.out.println("字符串: " + s);}void show(int i, String s) {System.out.println("整型数值: " + i + ", 字符串: " + s);}public static void main(String[] args) {Test test = new Test();test.show(10); // 输出 "整型数值: 10"test.show("Hello"); // 输出 "字符串: Hello"test.show(10, "Hello"); // 输出 "整型数值: 10, 字符串: Hello"}
}
4.方法重写
4.1 子类中的方法必须与父类中的方法具有相同的名称。
4.2 子类中的方法必须具有相同的参数列表(参数的类型、顺序和数量)。
4.3 子类中的方法的返回类型可以是父类方法返回类型的子类型(也称为协变返回类型)。
4.4 子类中的方法不能缩小父类方法的访问权限(即不能将父类方法的访问权限由 public 改为 private ),不能更加严格,但是可以扩大访问权限。
class Animal {void eat() {System.out.println("动物吃食物");}
}class Dog extends Animal {@Overridevoid eat() {System.out.println("狗吃骨头");}
}public class Test {public static void main(String[] args) {Animal animal = new Dog();animal.eat(); // 输出 "狗吃骨头"}
}
5.向上转型和向下转型
5.1 向上转型( Upcasting ):将一个子类对象转换为父类类型。这是一个隐式的转型过程,不需要显式地进行类型转换。
5.2 向下转型( Downcasting ):将一个父类对象转换为子类类型。这是一个显式的转型过程,需要使用强制类型转换符进行类型转换。需要注意进行类型检查,避免类型转换异常。
class Animal {void eat() {System.out.println("动物吃食物");}
}class Dog extends Animal {void bark() {System.out.println("狗叫");}
}public class Test {public static void main(String[] args) {Dog dog = new Dog();Animal animal = dog; // 向上转型,将 Dog 对象转换为 Animal 类型animal.eat(); // 输出 "动物吃食物"Dog anotherDog = (Dog) animal; // 向下转型,将 Animal 对象转换为 Dog 类型anotherDog.bark(); // 输出 "狗叫"}
}
其他补充
鱼聪明AI 的回答:
鱼聪明 AI地址:鱼聪明AI
多态是面向对象编程的一个重要概念,它允许我们使用一个接口来表示多种实现。多态的主要目的是让程序员可以针对抽象而不是具体实现来编程,这样的代码会有更好的可扩展性。
多态的基本概念是,同一行为,通过不同的子类,可以体现出来的不同的形态。例如,如果我们有一个 Shape 类和两个子类 Circle 和 Rectangle,我们可以通过一个 Shape 类型的变量来引用 Circle 或 Rectangle 的实例,然后调用它们的 draw 方法。这个 draw 方法在 Circle 类中可能会画一个圆,而在 Rectangle 类中可能会画一个矩形。这就是多态的一个例子。
然而,需要注意的是,类的属性和构造函数不具备多态性。属性被子类继承,但不具备多态性,而构造函数实际上是static方法,所以构造函数不具备多态性。
总的来说,多态允许我们编写更加灵活和可扩展的代码,它可以让我们以一种统一的方式来处理不同的对象,而不需要关心这些对象的具体类型。
知乎回答:

CSDN 某同学:
1)多态成员变量:编译运行看左边
2)多态成员方法:编译看左边,运行看右边
欢迎交流
在阅读本文后,你应该对多态有了一些了解,那么我将会提出三个问题,如果你能完整回答这三个回答的话,在面试中将大概率得到面试官的认可。
1.多态的实现原理是什么?
2.多态在 Java 中的实现方式是什么?
3.多态在框架设计中有什么应用场景?
AI 智能图书馆开源项目地址:https://gitee.com/falle22222n-leaves/vue_-book-manage-system
前后端总计已经 900+ Star,1.5W+ 访问!
⭐点赞⭐收藏⭐不迷路!⭐
相关文章:
面试官:对于 Java 中多态的理解是什么?
面试官:对于 Java 中多态的理解是什么? 题目 面试官:对于 Java 中多态的理解是什么? 推荐解析 1.父类的引用指向子类的对象 子类重写父类的方法:子类可以继承父类的方法,并对其进行重写。当通过父类的…...
JUC-1M/75±5°超小型密封温度继电器 体积小、重量轻、控温精度高 JOSEF约瑟
JUC系列温度继电器 JUC-1M型超小型密封温度继电器 JUC-2M型超小型密封温度继电器 继电器JUC-027M/2531H-III-G温度继电器 JUC-1M 10C常开温度继电器 JUC-1M 105C温度继电器 用途 小型温控开关系接触感应式密封温度继电器,具有体积小、重量轻、控温精度高等特点&…...
filebeat 配置
主要就是证书的配置 ca_trusted_fingerprint: 产生方式 openssl x509 -fingerprint -sha256 -in /etc/elasticsearch/certs/http_ca.crt 产生的结果 SHA256 Fingerprint 中的冒号 替换掉就是我们想要的结果 ssl: enabled: true ca_trusted_fingerprint: "…...
Qt教程 — 3.5 深入了解Qt 控件:Display Widgets部件(1)
目录 1 Display Widgets简介 2 如何使用Display Widgets部件 2.1 QLabel组件-显示图像或文本 2.2 QCalendarWidget组件-日历简单的使用 2.3 QLCDNumber组件-控件作时钟的显示 2.4 QProgressBar组件-模拟手机电池充电 2.5 QFrame组件-绘制水平/垂直线 Display Widgets将分…...
网络安全框架和云安全参考架构介绍
目录 一、网络安全框架 1.1 概述 1.2 IATF框架 1.2.1 框架来源 1.2.2 框架结构图 1.2.3 框架内容 1.2.3.1 人(People) 1.2.3.2 技术(Technology) 1.2.3.3 操作(Operation) 1.3 NIST网络安全框架 …...
360企业安全浏览器兼容模式显示异常某个内容不显示 偶发现象 本地无法复现情况js
360企业安全浏览器兼容模式显示异常 ,现象测试环境频发 ,本地连测试无法复现,线上反馈问题。 出现问题的电脑为windows且使用360企业安全浏览器打开兼容模式可复现 复现过程: 不直接点击超链接跳转页面 ,登录后直接通…...
JVM常见启动参数
目录 内存参数设置 垃圾收集 内存溢出 其他杂项 总结 java虚拟机(JVM)的启动参数可以用来调整其行为、性能和资源分配。以下是一些常见的JVM启动参数: 内存参数设置 初始化堆内存以满足应用程序需求是最常见的与性能相关的实践之一。 …...
单元测试、集成测试、系统测试区别
一、测方法不同 1、单元测试属于白盒测试范畴。 2、集成测试属于灰盒测试范畴。 3、系统测试属于黑盒测试范畴。 二、考察范围不同 1、单元测试主要测试单元内部的数据结构、逻辑控制、异常处理等。exception handling 2、集成测试主要测试模块之间的接口和接ロ数据传递关…...
NIVision-相机图像采集
应用场景 上位机与工业相机通讯,控制相机抓取图像。 工业相机的通讯接口大多为USB口或网口。 USB口则直接将通讯线缆插入上位机USB端口,打开MAX中设备与接口一栏可以看到电脑给相机分配的资源名称;网口则需要将网线连接相机和上位机…...
【vue-小知识】var、let 和 const之间的区别
文章目录 结论1、重复定义变量名var:允许重复定义变量名let和const:不可以重复定义变量名 2、修改值var:允许修改值let:允许修改值const:不允许修改值,会报错 3、变量提升var : 支持变量提升let和const&…...
24.3 分布式综合应用
24.3 分布式综合应用 1. 分布式事务1.1 分布式事务1.2 分布式事务方案1. 2pc2. 其他方案1.3 Seata分布式事务框架:基于2pc1. 简介2. 启动seata服务1.4 微服务事务案例分析1. 代码分析2. 基于Seata改造2. 分布式锁2.1 简介1. redis实现...
Android学习进阶
UI组件进阶 使用RecyclerView和Adapter显示列表数据 RecyclerView是Android开发中用于显示列表数据的一个灵活且高效的组件。与其前身ListView相比,RecyclerView引入了更加复杂的布局排列和动画支持,使得创建高度定制化的列表和网格布局变得更加简单。…...
“低代码+平台”:驱动企业数字化转型与创新的新引擎
“低代码平台”作为一种新兴的软件开发范式,正逐渐成为企业快速响应市场变化、优化业务流程、提升数字化水平的重要手段。它的价值在于,将传统软件开发的复杂性大大降低,赋予了非技术人员或轻量级开发者快速构建应用的能力,并能灵…...
python代码截取任意页的pdf
python代码把截取任意页的pdf:比如你有一个pdf文件1.pdf,共有30页,但是,你想把其中的10-20页截取出来保存成新的pdf,名为2.pdf,可以使用下面代码 from PyPDF2 import PdfReader, PdfWriter# 输入和输出文件…...
速盾:cdn加速后真实ip会暴漏吗?
CND(内容分发网络)是一种通过将内容分发到全球各地的服务器来加速网站访问的技术。当用户请求访问一个网站时,CDN会将静态资源(如图片、视频、脚本等)缓存在离用户最近的服务器上,从而提高网站的加载速度。…...
ATA-5310前置微小信号放大器在红外线传感器中的应用
当涉及到红外线传感器时,前置微小信号放大器扮演着关键的角色。红外线传感器是一种用于探测和测量红外辐射的设备,它们通常用于热成像、物体检测、温度测量、动作检测等应用中。前置微小信号放大器在红外线传感器中的应用具有重要意义,下面将…...
【黑马程序员】Python多任务
文章目录 多进程多进程使用流程导入包Process进程类说明 获取进程编号目的常用操作 获取进程名进程注意点进程之间不共享全局变量主进程会等待子进程结束之后再结束设置守护主进程 多线程threading模块线程注意点线程之间执行是无序的主线程会等待所有的子线程执行结束在结束线…...
前端与后端具备能力的区别
前端与后端具备能力的区别 在软件开发领域,前端和后端是两个至关重要的部分,它们各自承担着不同的职责和任务。前端主要负责与用户交互的界面设计和实现,而后端则负责处理数据和业务逻辑。因此,前端和后端开发者需要具备不同的技…...
【蓝桥杯】第15届蓝桥杯青少组stema选拔赛C++中高级真题答案(20240310)
一、选择题 第 1 题 第 2 题 表达式1000/3的结果是( A )。 A.333 B.333.3 C.334 D.333.0 第 3 题 下列选项中,判断a等于1并且b等于1正确的表达式是( B )。 A.!((a!1)&&(b!1)) B.!((a!1)||(b!1)) C.!(a1)&&(b1) D.(a1)&&(b1) 【解析】 A…...
20240319金融读报:金融助力农业科创企业风控模型
1、农发行2023年第二十期金融债券票面利率为2.85% 2、农业生产现代化转型-》农机:新疆尉犁县超级棉田里,农业无人机、采棉打包机、棉田打顶机器人等现代化机械设施,让两个人收种3000亩棉田成为了可能(金融机构可以结合农机购置补贴…...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...
Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...
Spring AOP代理对象生成原理
代理对象生成的关键类是【AnnotationAwareAspectJAutoProxyCreator】,这个类继承了【BeanPostProcessor】是一个后置处理器 在bean对象生命周期中初始化时执行【org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization】方法时…...
