面试官:对于 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亩棉田成为了可能(金融机构可以结合农机购置补贴…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...
Rust 开发环境搭建
环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu 2、Hello World fn main() { println…...
Python 高效图像帧提取与视频编码:实战指南
Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...
Axure 下拉框联动
实现选省、选完省之后选对应省份下的市区...
MySQL体系架构解析(三):MySQL目录与启动配置全解析
MySQL中的目录和文件 bin目录 在 MySQL 的安装目录下有一个特别重要的 bin 目录,这个目录下存放着许多可执行文件。与其他系统的可执行文件类似,这些可执行文件都是与服务器和客户端程序相关的。 启动MySQL服务器程序 在 UNIX 系统中,用…...
