java方法调用

来源:互联网 发布:淘宝搜索优化软件 编辑:程序博客网 时间:2024/06/05 17:26

一直想不明白java方法之间的调用关系,看了java虚拟机相关资料后有一点自己的见解,写下来加深下理解。

public class Main {public static void main(String[] args) {Parent parent=new PPSon();parent.myname();}}一级public class Parent {public void myname() {System.out.println("myname_Parent");// TODO Auto-generated method stubprintMyName();}public void printMyName(){System.out.println("Parent");}}二级public class ParentSon extends Parent {@Overridepublic void myname() {System.out.println("myname_ParentSon");super.myname();}@Overridepublic void printMyName() {System.out.println("ParentSon");super.printMyName();}}三级public class PPSon extends ParentSon{@Overridepublic void myname() {System.out.println("myname_PPSon");// TODO Auto-generated method stubsuper.myname();}@Overridepublic void printMyName() {System.out.println("PPSon");// TODO Auto-generated method stub//super.printMyName();}}

java以栈帧的方式存储方法信息,默认为this指针。

方法执行过程中遇到super关键字会向超类进行查找;

详细内容查看《深入理解java虚拟机》19章方法的调用与返回。

    大致过程是this->myname()-----ParentSon->myname()-----Parent->myname()。

 这时Parent的myname中有一个printMyName(),它之前没有super修饰默认为this,

 所以这时PPSon->printMyName()---ParentSon->printMyName()---Parent->printMyName()。

 这时方法帧处于Partent.myname()中,方法结束的先后顺序为Parent.myname(),ParentSon.myname(),PPSon.myname()


0 0