java方法调用

一直想不明白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 stub
			printMyName();
		}
		public void printMyName(){
			System.out.println("Parent");
		}
}
	二级
public class ParentSon extends Parent {
		@Override
		public void myname() {
			System.out.println("myname_ParentSon");
			super.myname();
		}
		@Override
			public void printMyName() {
			System.out.println("ParentSon");
				super.printMyName();
			}
}

	三级
public class PPSon extends ParentSon{
		@Override
		public void myname() {
			System.out.println("myname_PPSon");
			// TODO Auto-generated method stub
			super.myname();

		}
		@Override
			public 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()

 

posted @ 2016-07-21 17:12  清澈见底  阅读(84)  评论(0编辑  收藏  举报