java面试题-基础问题-如何理解Java中的多态?
如何理解Java中的多态?
- 如何理解Java中的多态?
- 典型回答
- 扩展知识
- 方法的重载与重写
- 重载和重写的区别
如何理解Java中的多态?
典型回答
多态的概念比较简单,就是同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。
如果按照这个概念来定义的话,那么多态应该是一种运行期的状态。为了实现运行期的多态,或者说是动态绑定,需要满足三个条件:
●有类继承或者接口实现。
●子类要重写父类的方法。
●父类的引用指向子类的对象。
简单来一段代码解释下:
public class Parent{public void call(){sout("im Parent");}
}
public class Son extends Parent{// 1.有类继承或者接口实现public void call(){// 2.子类要重写父类的方法sout("im Son");}
}
public class Daughter extends Parent{// 1.有类继承或者接口实现public void call(){// 2.子类要重写父类的方法sout("im Daughter");}
}
public class Test{public static void main(String[] args){Parent p = new Son(); //3.父类的引用指向子类的对象Parent p1 = new Daughter(); //3.父类的引用指向子类的对象}
}
这样,就实现了多态,同样是Parent类的实例,p.call 调用的是Son类的实现、p1.call调用的是Daughter的实现。
有人说,你自己定义的时候不就已经知道p是son,p1是Daughter了么。但是,有些时候你用到的对象并不都是自己声明的 。
比如Spring 中的IOC出来的对象,你在使用的时候就不知道他是谁,或者说你可以不用关心他是谁。根据具体情况而定。
前面说多态是一种运行期的概念。还有一种说法,包括维基百科也说明,认为多态还分为动态多态和静态多态。
一般认为Java中的函数重载是一种静态多态,因为他需要在编译期决定具体调用哪个方法。关于这一点,不同的人有不同的见解,建议在面试中如果被问到,可以这样回答:
“我认为,多态应该是一种运行期特性,Java中的重写是多态的体现。不过也有人提出重载是一种静态多态的想法,这个问题在StackOverflow等网站上有很多人讨论,但是并没有什么定论。我更加倾向于重载不是多态。”
这样沟通,既能体现出你了解的多,又能表现出你有自己的思维,不是那种别人说什么就是什么的。
扩展知识
方法的重载与重写
重载是就是函数或者方法有同样的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。
返回值不同,但是方法名和参数列表都相同的两个方法,不是重载。
重写指的是在Java的子类与父类中有两个名称、参数列表都相同的方法的情况。由于他们具有相同的方法签名,所以子类中的新方法将覆盖父类中原有的方法。
重载和重写的区别
1、重载是一个编译期概念、重写是一个运行期间概念。
2、重载遵循所谓“编译期绑定”,即在编译时根据参数变量的类型判断应该调用哪个方法。
3、重写遵循所谓“运行期绑定”,即在运行的时候,根据引用变量所指向的实际对象的类型来调用方法
相关文章:
java面试题-基础问题-如何理解Java中的多态?
如何理解Java中的多态?如何理解Java中的多态?典型回答扩展知识方法的重载与重写重载和重写的区别如何理解Java中的多态? 典型回答 多态的概念比较简单,就是同一操作作用于不同的对象,可以有不同的解释,产…...
03.vue3的计算属性
文章目录1.计算属性1.get()和set()2.computed的简写3.computed和methods对比2.相关demo1.全选和反选2.todos列表1.计算属性 模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的。在模板中放入太多的逻辑会让模板过重且难以维护。所以,对于任何…...
Ceph性能调优
1. 最佳实践 1.1 基本 监控节点对于集群的正确运行非常重要,应当为其分配独立的硬件资源。如果跨数据中心部署,监控节点应该分散在不同数据中心或者可用性区域日志可能会让集群的吞吐量减半。理想情况下,应该在不同磁盘上运行操作系统、OSD…...
机器学习-问答题准备(英文)-更新中
第一章 入门 How would you define Machine Learning? Machine Learning is about building systems that can learn from data. Learning means getting better at some task, given some performance measure. Can you name four types of problems where it shines? To r…...
展示演示软件设计制作(C语言)
展示演示软件设计制作 所谓展示演示软件就像是PPT那样的东西。PPT是幻灯片式的展示,而我设计的软件是多媒体的,多样展示方法的,多种功能的。可以扩展为产品展示,项目介绍,景点导游,多媒体授课,…...
Android 自定义view 入门 案例
自定义一个圆环进度条: 1.首页Android Studio创建一个项目 2.在项目src/xxx/目录下右键选择创建一个自定义view页面:new->UICompoent->customer view 3.输入自定义名称,选择开发语言 4.确定之后,自动生成3个文件一个是&…...
[imangazaliev/didom]一个简单又快速的DOM操作库
DiDOM是一个功能齐全、易于使用和高性能的解析器和操作库,可以帮助PHP开发者更加高效地处理HTML文档。 为了更好地了解这个项目,我们先来看看下面的介绍。 安装 你可以使用composer来安装DiDOM,只需要在你的项目目录下执行下面的命令&…...
Cookie和Session的工作流程及区别(附代码案例)
目录 一、 HTTP协议 1.1 为什么HTTP协议是无状态的? 1.2 在HTTP协议中流式传输和分块传输编码的区别 二、Cookie和Session 2.1 Cookie 2.2 Session 2.3 Cookie和Session的区别 三、servlet中与Cookie和Session相关的API 3.1 HttpServletRequest 类中的相关方…...
适用于高级别自动驾驶的驾驶员可预见误用仿真测试
摘要 借助高级别自动驾驶(HAD),驾驶员可以从事与驾驶无关的任务。在系统出现失效的情况下,驾驶员应该合理地重新获得对自动驾驶车辆(AV)的控制。不正确的系统理解可能会引起驾驶员的误操作,并可能导致车辆级的危害。ISO 21448预期功能安全标…...
Linux之进程知识点
一、什么是进程 进程是一个运行起来的程序。 问题思考: ❓ 思考:程序是文件吗? 是!都读到这一章了,这种问题都无需思考!文件在磁盘哈。 本章一开始讲的冯诺依曼,磁盘就是外设,和内…...
一种供水系统物联网监测系统
1.1供水系统 1.1.1监测范围选择依据 (1)管网老化区域管网 管网建设年代久远,通常管网发生破损问题较大,根据管网本身属性和历史发生事件的统计分析,结合数理统计,优先选择管网老化区域的管段所在区域进行…...
Linux驱动开发——字符设备(2)
目录 虚拟串口设备驱动 一个驱动支持多个设备 习题 虚拟串口设备驱动 字符设备驱动除了前面搭建好代码的框架外,接下来最重要的就是要实现特定于设备的操作方法,这是驱动的核心和关键所在,是一个驱动区别于其他驱动的本质所在,…...
【MySQL数据库原理】MySQL Community安装与配置
目录 安装成功之后查看版本验证1、介绍、安装与配置数据库2、操作MySQL数据库3、MySQL数据库原理安装成功之后查看版本验证 SELECT VERSION();查看mysql版本号 1、介绍、安装与配置数据库 下载安装包:https://download.csdn.net/download/weixin_41194129/87672588 MySQL…...
【ROS参数服务器增删改c++操作1】
需求:实现参数服务器参数的增删改查操作。 在C中实现参数服务器数据的增删改查,可以通过两套API实现:. ros::NodeHandle ros::param下面为具体操作演示: 在src下面的自己定义的作用包下面新建文件。 比如我的是一直存在的demo03_ws文件下的src里面&…...
elasticsearch 常用数据类型详解和范例
主要内容 elasticsearch 中的字符串(keyword)类型 的详解和范例 elasticsearch 中的字符串/文本(text)类型 的详解和范例 elasticsearch 中的数字(数值)类型 的详解和范例 elasticsearch 中的布尔&#…...
力扣119杨辉三角 II:代码实现 + 方法总结(数学规律法 记忆法/备忘录)
文章目录第一部分:题目第二部分:解法①-数学规律法2.1 规律分析2.2 代码实现2.3 需要思考第三部分:解法②-记忆法(备忘录)第四部分:对比总结第一部分:题目 🏠 链接:119.…...
安装pandas遇到No module named ‘_bz2’ 的解决方案
出现这个问题我们可以按照这篇博客去解决: https://blog.csdn.net/bf96163/article/details/128654915 如果解决不了,可以这样去做: 1.确保安装了 对应的库 // ubuntu安装命令 sudo apt-get install bzip2-devel // centos安装命令 sudo y…...
【数据治理-05】什么数据才是货真价实的数据资产,一起聊聊数据资产
在国家层面一些列文件、纲要、政策、办法等政府力量的推动下,数据资产这个词越来越频繁的出现在我们寻常工作当中,现在越来越觉得这个词被滥用,大有“一切数据皆是资产”的感觉,业务数据是资产、技术数据是资产,不能共…...
第三章 ARM处理器体系结构【嵌入式系统】
第三章 ARM处理器体系结构【嵌入式系统】前言推荐第三章 ARM处理器体系结构3.1 概述3.2 ARM处理器的结构3.7 ARM的异常中断处理最后前言 以下内容源自《【嵌入式系统】》 仅供学习交流使用 推荐 无 第三章 ARM处理器体系结构 留着占位 敬请期待 3.1 概述 3.2 ARM处理器的…...
最速下降法
首先,计算函数f的梯度向量:∇f(x1,x2)[2x150x2]\nabla f(x_1,x_2) \begin{bmatrix}2x_1\\50x_2\end{bmatrix}∇f(x1,x2)[2x150x2] 然后,选择一个初始点(x10,x20)(x_1^0,x_2^0)(x10,x20),比如(0,0)(0,0)(0,0)。 接…...
RK3588开发板TF卡槽改造:实现SDIO WIFI模组O9201SB的灵活接入
1. RK3588开发板TF卡槽改造背景与价值 最近在折腾RK3588开发板时,发现一个很有意思的玩法:把原本只能插TF卡的卡槽改造成支持SDIO WIFI模组的接口。这个改造特别适合那些需要灵活接入不同WIFI模组的开发者,比如我在做智能家居网关开发时&…...
计算机毕业设计:汽车数据可视化与后台管理平台 Django框架 requests爬虫 可视化 车辆 数据分析 大数据 机器学习(建议收藏)✅
博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立软件开发工作室,专注于计算机相关专业项目实战6年之久,累计开发项目作品上万套。凭借丰富的经验与专业实力,已帮助成千上万的学生顺利毕业,…...
麒麟V10系统下国产海量数据库安装全攻略(含内核参数优化与避坑指南)
麒麟V10系统下国产海量数据库安装全攻略(含内核参数优化与避坑指南) 在国产化技术快速发展的今天,越来越多的企业和机构开始采用国产操作系统和数据库产品。麒麟V10作为国产操作系统的代表之一,其稳定性和安全性得到了广泛认可。而…...
vLLM-v0.17.1详细步骤:vLLM + Triton Ensemble实现多模型协同推理
vLLM-v0.17.1详细步骤:vLLM Triton Ensemble实现多模型协同推理 1. vLLM框架简介 vLLM是一个专为大型语言模型(LLM)设计的高性能推理和服务库,以其出色的吞吐量和易用性著称。这个项目最初由加州大学伯克利分校的天空计算实验室开发,现在已…...
Remotery WebSocket通信机制:浏览器端性能数据可视化
Remotery WebSocket通信机制:浏览器端性能数据可视化 【免费下载链接】Remotery Single C file, Realtime CPU/GPU Profiler with Remote Web Viewer 项目地址: https://gitcode.com/gh_mirrors/re/Remotery Remotery作为一款轻量级实时CPU/GPU性能分析工具&…...
解锁Switch模拟潜能:Ryujinx架构深度解析与实战优化
解锁Switch模拟潜能:Ryujinx架构深度解析与实战优化 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx Ryujinx作为一款采用C#开发的开源Nintendo Switch模拟器,通…...
SLAM Toolbox应用宝典:从技术原理到实战落地的全面指南
SLAM Toolbox应用宝典:从技术原理到实战落地的全面指南 【免费下载链接】slam_toolbox Slam Toolbox for lifelong mapping and localization in potentially massive maps with ROS 项目地址: https://gitcode.com/gh_mirrors/sl/slam_toolbox SLAM Toolbox…...
OpenClaw自动化测试框架:百川2-13B驱动的CI/CD辅助方案
OpenClaw自动化测试框架:百川2-13B驱动的CI/CD辅助方案 1. 为什么选择OpenClaw做测试自动化 去年我在重构一个中型前端项目时,遇到了测试覆盖率不足的老问题。手动补测试用例不仅耗时,还经常遗漏边界条件。当我尝试用传统测试生成工具时&am…...
7大核心优势!Windows环境PM2服务化终极解决方案:从痛点到实战的完整指南
7大核心优势!Windows环境PM2服务化终极解决方案:从痛点到实战的完整指南 【免费下载链接】pm2-installer Install PM2 offline as a service on Windows or Linux. Mostly designed for Windows. 项目地址: https://gitcode.com/gh_mirrors/pm/pm2-ins…...
陶瓷淬火时“啪“一声裂开的瞬间,背后藏着相场模型里的连续损伤演化。今天咱们用Matlab玩个热应力场+相场断裂的耦合计算,看看脆性材料怎么被温度场玩坏
matlab相场热力耦合断裂问题,陶瓷淬火算例,paraview可视化先上主菜——相场控制方程。核心是温度场T与相场d的相爱相杀: % 热传导方程残差计算 function R_T calc_heat_residual(T, d, dt)kappa 1e-5; % 热扩散系数grad_T gradient(T);R_T…...
