java重载疑惑
来源:互联网 发布:mac vim 进入编辑模式 编辑:程序博客网 时间:2024/06/05 23:03
首先是Base代码
class Base { @Override public String toString() { return "Base"; }}
Child代码
class Child extends Base { @Override public String toString() { return "Child"; }}
Main代码
class Main { public void test(Base base) { System.out.print("Function for Base: "); System.out.println(base); } public void test(Child child) { System.out.print("Function for Child: "); System.out.println(child); } public static void main(String[] args) { Child child = new Child(); Base base = new Base(); Main ts = new Main(); ts.test(child); ts.test(base); ts.test(child); }}
编译运行没有问题。十分疑惑,javac或jvm是怎么判断该调用哪个方法。查看class文件,发现是由javac生成字节码是就指定了调用方法。
<pre name="code" class="plain">24: aload_3 25: aload_1 26: invokevirtual #13 // Method test:(LChild;)V 29: aload_3 30: aload_2 31: invokevirtual #14 // Method test:(LBase;)V 34: aload_3 35: aload_1 36: invokevirtual #13 // Method test:(LChild;)V
修改下代码,去掉public void test(Child child)方法。字节码为
<pre name="code" class="plain">24: aload_3 25: aload_1 26: invokevirtual #12 // Method test:(LBase;)V 29: aload_3 30: aload_2 31: invokevirtual #12 // Method test:(LBase;)V 34: aload_3 35: aload_1 36: invokevirtual #12 // Method test:(LBase;)V
是由javac来选择方法的,这部分等查阅了java语言规范,再研究下。
0 0
- java重载疑惑
- Java参数重载带来的疑惑
- Java多态中重载方法参数分别为父类和子类时的疑惑
- Java多态中重载方法参数分别为父类和子类时的疑惑
- Java多态中重载方法参数分别为父类和子类时的疑惑
- Java if语句疑惑
- java基础----一些疑惑
- java基础-float疑惑
- JAVA运算符疑惑
- Java疑惑点解析(一)
- Java疑惑点解析(二)
- Java疑惑点解析(二)
- Java疑惑点解析(一)
- Java疑惑点解析(二)
- Java疑惑点解析(一)
- Java疑惑点解析(二)
- Java疑惑点解析(二)
- Java疑惑点解析(一)
- C#事件机制
- 软件版本GA,RC,alpha,beta,Build 含义
- qml 嵌套到 qt的对话框上
- SpringMVC中使用@ResponseBody注解返回值,Ajax取得中文乱码解决方法
- Git的使用(一)——Git的安装和配置
- java重载疑惑
- 最小二乘的理论依据
- EditText输入监听
- boost 线程、互斥体、条件变量
- Swap Nodes in Pairs
- 整合 ucenter 注册自动激活
- word文档页眉页脚页码的修改问题
- 问答的搜索展示
- 打断点一直跳到内存中