也许你会有疑问super关键字是如何暗箱操作的呢?
这个问题涉及到java虚拟机的一些机制了,我们知道java是支持多态的,那是因为具体到指令集上,是invokevirtual指令支持多态的!而invokespecial是不支持多态的!
我们通过使用super关键字发出方法调用时,指令就被编译器编译成了invokespecial指令(发出方法调用的对象依然是this指向的实例)
例子:
public class Parent { public void test(){ } public void test1() { test(); } } public class Child extends Parent { public void test() { super.test(); } public static void main (String[]args){ new Child().test(); new Child().test1(); } }
查看编译后的结果:
其中Child的Test方法体编译为如下内容
aload_0 invokespecial #15(superdemo/Parent.test) return
其中aload_0是将this这个引用压入栈。(也证明了发出方法调用的依然是this)
#15指向常量池中索引值为15的常量,是一个CONSTANT_Methodref_info类型的常量。其代表superdemo包中Parent类的test方法(这里这两个类所在包为superdemo)
通俗一点来说
super.test();
被jvm变成了
Parent p=this; p.test();
但是需要被编译为invokespecial。
相关推荐
计算机后端-Java-Java核心基础-第13章 面向对象05 16. 继承和super课后练习.avi
计算机后端-Java-Java核心基础-第13章 面向对象05 14. super调用构造器.avi
计算机后端-Java-Java核心基础-第13章 面向对象05 13. super调用属性和方法.avi
java实现supermarket源码java实现supermarket源码java实现supermarket源码java实现supermarket源码java实现supermarket源码java实现supermarket源码java实现supermarket源码java实现supermarket源码java实现super...
计算机后端-Java-Java核心基础-第14章 面向对象06 02. 复习:重写与super.avi
好啊好啊 抽象类与接口是Java中最重要部分之一,这里用较大的篇幅来做下这部分的笔记. 1. final关键字 在Java中, 可以使用final关键字修饰类、方法以及成员变量。 (1).final标记的类不能被继承; (2).final标记...
对于java中this、super进行详细的解释
java中this 与super的详解
详解Java super 关键字
第5章 5.1 面向过程的设计思想120 5.2 面向对象的设计思想120 5.3 抽象121 5.3.1 对象的理解121 5.3.2 Java抽象思想的实现122 5.4 封装124 5.4.1 对象封装的概念理解124 5.4.2 类的理解125 5.4.3 Java类模板创建125 ...
第5 版 清华大学出版社 “SCJP学习指南” 人民邮电出版社 “Java 编程思想” 第3版 机械工业出版社 教学内容和要求 知识点 重要程度 使用频度 难度 Java 入门 高 中 易 变量和运算符 高 ...
java---- 封装,接口,继承,覆盖,构造过程,多态,static、this、super、final用法
自己制作的VISTA-128 VISTA-250 IPM-VISTA SUPER II网络模块编程
Java程序设计实验11-static、super、final、代码块.docxJava程序设计实验11-static、super、final、代码块.docxJava程序设计实验11-static、super、final、代码块.docxJava程序设计实验11-static、super、final、...
继承 继承的特点 继承的优点 继承的JAVA实现 子类构造方法 2-1 子类构造方法 2-2 调用父类构造方法的语法为: super() 或 super(参数列表) ; super () 方法始终指向调用类的父类 调用父类构造方法 演示:示例 3 多态...
Java SE编程入门教程 java this和super(共10页).pptx Java SE编程入门教程 java 常用API(共22页).pptx Java SE编程入门教程 javaGUI编程快速入门(1)(共82页).pptx Java SE编程入门教程 java包装器(共9页)....
【IT十八掌徐培成】Java基础第04天-06.super-super()-this-this().zip
java代码-使用java解决super的用法的源代码 ——学习参考资料:仅用于个人学习使用!
java8 源码 JavaGuide 的Star数量虽然比较多,但是它的价值和含金量一定是不能和 Dubbo、Nacos这些优秀的国产开源项目比的。希望国内可以出更多优秀的开源项目! 另外,希望大家对面试不要抱有侥幸的心理,打铁还需...
第5章 类与对象 59 5.1 类的定义与对象的创建 59 5.2 引用赋值 61 5.3 成员方法 62 5.3.1 void返回类型 64 5.3.2 无参方法 65 5.3.3 多参方法 65 5.4 局部变量和成员变量 67 5.5 this引用 68 5.6...