标签: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