java面试题——对于多态你是怎么理解的呢?不一样的角度,带你重新看java
java面试的时候经常会被问到一个问题,那就是java三大特性:继承,封装和多态。那么这三者的含义究竟是什么你真的清楚吗?我看网上大多都是人云亦云。所以我想把我的想法记录下来供大家参考~今天先聊一个,多态是什么呢?
我们都知道,java程序是分为编译和运行两部分的,那你有没有想过,java的编译的期间是怎么判断你所写的方法是属于哪里的呢?没错,就是我们常说的绑定。绑定就是指把一个方法和方法的主体关联起来,对于java来说,绑定分为静态绑定和动态绑定。那这和我们的多态有什么关系呢!所谓的多态,就是指父类引用指向子类对象,这样调用的方法就是子类的实现而不是父类的实现,多态实现的核心就是我们上面说的动态绑定。这样说是不是有点迷?没事,往下看就知道了。
首先说一下静态绑定:java程序运行前就可以知道这个方法所属的主体,实际上也就是java程序编译期间的绑定,java中的方法只有用private,final,static和构造方法是静态绑定。那么我们来回忆一下这几个东西的特点:
private修饰的方法,不可以在子类当中被继承,所以自然也就和本类绑定到了一起。
final修饰的方法,可以被继承,但是不可以被覆盖(重写),所以子类调用的都是父类当中的这个final方法,所以我们也可以了解到final 的作用:一,防止方法被覆盖,二,有效的关闭动态绑定。
构造方法这个也不用多说,虽然网上有说继承这个类就默认继承了他的无参构造,但是我们都知道super关键字就是帮助子类调用父类的构造方法来实现初始化,而我们使用继承的方法则不需要那么做,所以编译器也可以看出这个方法的主体。
static修饰的方法,可以被继承,但是不可以被覆盖,但是可以被子类隐藏。继承自然是指这个方法可以继承父类的静态方法,但是不能够重写,如果子类中有相同的方法时,父类的方法被隐藏起来,为什么这么说呢?因为如果将子类转型向上为父类时,那么调用该方法时使用的是父类的方法,所以是被隐藏起来。
说完了静态绑定,我们说一下重要的动态绑定,那么如果一个方法在编译期间没办法判定方法的主体怎么办,那就需要我们的动态绑定,也就是运行期间的绑定。是如何实现的呢?不同的语言动态绑定的方法是不一样的,Java是什么样的呢?首先虚拟机提取对象实际类型的方法表,虚拟机查找方法签名,调用该方法。因此当虚拟机调用一个实例方法时,就会根据对象的实际的类型来选择相应的方法,这也就是我们所说的动态绑定。多态的实现方式,比如接口,重写或者抽象类和抽象方法都是基于这一个中心思想来实现的。
综上,大家可以思考一下,成员变量或者类变量采用的是什么绑定呢?有没有什么办法可以使得静态绑定变为动态绑定呢?
java面试题——对于多态你是怎么理解的呢?不一样的角度,带你重新看java的更多相关文章
- 带着新人看java虚拟机07(多线程篇)
这一篇说一下比较枯燥的东西,为什么说枯燥呢,因为我写这都感觉很无聊,无非就是几个阻塞线程的方法和唤醒线程的方法... 1.线程中断 首先我们说一说怎么使得一个正在运行中的线程进入阻塞状态,这也叫做线程 ...
- 带着新人看java虚拟机06(多线程篇)
其实多线程还有很多的东西要说,我们慢慢来,可能会有一些东西没说到,那就没办法了,只能说尽量吧! 1.synchronized关键字 说到多线程肯定离不开这个关键字,为什么呢?因为多线程之间虽然有各自的 ...
- 带着新人看java虚拟机04(多线程篇)
我记得最开始接触多进程,多线程这一块的时候我不是怎么理解,为什么要有多线程啊?多线程到底是个什么鬼啊?我一个程序好好的就可以运行为什么要用到多线程啊?反正我是十分费解,即使过了很长时间我还是不是很懂, ...
- 带着新人看java虚拟机03
分享一篇博客:https://blog.csdn.net/yfqnihao/article/details/8289363,本篇有部分参考这篇博客!!! 还是继续说一下java虚拟机,为什么呢?因为我 ...
- 带着新人看java虚拟机02
上一节是把大概的流程给过了一遍,但是还有很多地方没有说到,后续的慢慢会涉及到,敬请期待! 这次我们说说垃圾收集器,又名gc,顾名思义,就是收集垃圾的容器,那什么是垃圾呢?在我们这里指的就是堆中那些没人 ...
- 带着新人看java虚拟机01
1.前言(基于JDK1.7) 最近想把一些java基础的东西整理一下,但是又不知道从哪里开始!想了好久,还是从最基本的jvm开始吧!这一节就简单过一遍基础知识,后面慢慢深入... 水平有限,我自己也是 ...
- 带着新人看java虚拟机05(多线程篇)
上一篇我们主要是把一些基本概念给说了一下以及怎么简单的使用线程池,我们这一节就来看看线程池的实现: 1.线程池基本参数 以Executors.newFixedThreadPool()这种创建方式为例: ...
- 拼多多、饿了么、蚂蚁金服Java面试题大集合
自己当初找工作时参加过众多一线互联网公司的Java研发面试,这段时间处于寒冬,然而前几天跳槽找工作,两天面了3家,已经拿了两个offer,觉得可以和大家分享下: 下面为拼多多.饿了么.蚂蚁金服.哈啰出 ...
- 金三银四季来了!Java 面试题大放送,能答对70%就去BATJTMD试试~
摘要: 2019,相对往年我们会发现今年猎头电话少了,大部分企业年终奖缩水,加薪幅度也不如往年,选择好offer就要趁早,现在开始准备吧,刷一波Java面试题,能回答70%就去BATJTMD大胆试试~ ...
随机推荐
- java实现最大连续和问题
/* 10 5 -3 12 -31 15 22 -7 6 -8 -9 10 .... 暴力:O(n^3) 分治:[ mid ) 三种情况求最大 基线法: O(n) 2个数组: 从左到本位:出现的最大累 ...
- node实现图片分割
前言 最近,女王大大日常找我弄图片,本来之前我一直是ps帮他弄得,后来- -,ps不能分割过长的图片,我就想想能不能通过代码来帮他实现好了. 经过我在npm搜索一番,发现没有一个纯代码层面的high ...
- 阿里云高级技术专家空见: CDN的数据化之路
想要实现优质高速的互联网视频服务,一定离不开高质量的内容分发网络服务,就是我们常说的CDN,在10月13日云栖大会视频多媒体分论坛上,阿里云高级技术专家空见为大家讲解了CDN服务过程中,数据处理.安全 ...
- react使用Echarts绘制高亮可点击选中的省市地图
最近做项目遇到一个需求,需要显示广东省各个地级市的地图,并且鼠标移入高亮显示,鼠标点击可以选中某个地级市.在网上查阅了大量资料之后,最后选择了使用echarts实现该需求.在此记录一下,希望可以帮到有 ...
- hadoop知识整理(3)之MapReduce之代码编写
前面2篇文章知道了HDFS的存储原理,知道了上传和下载文件的过程,同样也知晓了MR任务的执行过程,以及部分代码也已经看到,那么下一步就是程序员最关注的关于MR的业务代码(这里不说太简单的): 一.关于 ...
- DML_The OUTPUT Clause
DML_The OUTPUT Clause /**/ ------------------------------------------------------------------------- ...
- 在MS SQL(SSMS中)_Format_SQL_更改设置_增加命令
在MS SQL(SSMS中)_Format_SQL_更改设置_增加命令 目的:要格式化这么一段SQL语句(这是随便从网上Copy的一段),没细看内容,反正看到头疼,乱七八糟的不想看. select b ...
- (八)利用 Profile 构建不同环境的部署包
接上回继续,项目开发好以后,通常要在多个环境部署,象我们公司多达5种环境:本机环境(local).(开发小组内自测的)开发环境(dev).(提供给测试团队的)测试环境(test).预发布环境(pre) ...
- mybatis的嵌套查询与嵌套结果查询的不同
原文:https://blog.csdn.net/qq_39706071/article/details/85156840 实体类: 嵌套查询mapper方法:嵌套查询的弊端:即嵌套查询的N+1问题尽 ...
- 【JMeter_19】JMeter逻辑控制器__简单控制器<Simple Controller>
简单控制器<Simple Controller> 业务逻辑: 就像他的名字一样,简单,可以理解为一个文件夹,就是分组用的,没有其他特殊功能,但相比不添加简单控制器,区别在于简单控制器可以被 ...