标签:mamicode 编译 fat on() out pre class code 调用
1、方法重载
创建MyTest5类
public class MyTest5 { public void test(Grandpa grandpa){ System.out.println("grandpa"); } public void test(Father father){ System.out.println("father"); } public void test(Son son){ System.out.println("son"); } public static void main(String[] args) { Grandpa g1 = new Father(); Grandpa g2 = new Son(); MyTest5 myTest5 = new MyTest5(); myTest5.test(g1); myTest5.test(g2); } } class Grandpa{ } class Father extends Grandpa{ } class Son extends Father{ }
输出结果如下:
方法的静态分派
Grandpa g1 = new Father();
以上代码,g1的静态类型是Grandpa,而g1的实际类型(真正的指向的类型)是Father
我们可以得出这样一个结论:变量的静态类型是不会发生变化的,而实际类型则可以发生变化的(多态的一种体现),实际类型是在运行期方可确定。
方法重载,是一种静态的行为,编译期就可以完全确定。
所以MyTest5最终的输出结果两个都是grandpa
使用jclasslib,调用两个test方法,使用的都是invokevirtual指令
标签:mamicode 编译 fat on() out pre class code 调用
原文地址:https://www.cnblogs.com/linlf03/p/11107879.html