构建后端第6篇之---java 多态的本质 父类引用 指向子类实现
张艳涛写于2021-2-20
今天来个破例了,不用英文写了,今天在家里电脑写的工具不行,简单的说
主题是:java多态的原理与实现
结论是:java的多态 Father father= new Son();father.sayHi(),调用的是father类的方法,father的类是抽象类,那么将方法表中的地址重写为son的sayHi地址就成功了
public abstract class A { public void wangwang(){ System.out.println("WW~~~"); } public abstract void sayHi(); } public class B extends A { @Override public void sayHi() { System.out.println("hello , i am B~~"); } public void methodB(){ System.out.println("helo, this is method B~~"); } } public class MyTest { public static void main(String[] args) throws IOException { B b = new B(); System.in.read(); System.out.println(b); } }
那么可以先看字节码文件,来确定调用的是Father.sayHi()方法
现在使用工具查看这个实例的虚拟机对象,jsp --> 10992 MyTest
D:\devtools\jdk1.8.0_45\lib>java -cp sa-jdi.jar sun.jvm.hotspot.HSDB
public class com.zyt.dpbook.jvm.B @0x0000000100060c18
加上0x1b8
mem 0x100060DD0 8 查看8条
这里就是全部过程,vtbale 虚表显示object 的5个方法,然后是父类的方法(如果子类重写了就变更地址指向子类地址),最后地三部分是子类自己的方法