码迷,mamicode.com
首页 > 其他好文 > 详细

多态的内存分析-转载

时间:2016-06-09 23:45:03      阅读:459      评论:0      收藏:0      [点我收藏+]

标签:

 

java运行时,在内存里分四个部分。栈,堆,数据区和代码区。。举个例子String str=new String("AAA");str就放在栈里,字符串"AAA"放在堆里。所有的方法代码都放在了代码区。

public class A{
public void show(){
System.out.println("A");
}
}


public class B extends A{
public void show(){
System.out.println("B");
}
public void say(){
System.out.println("B says");

}
}

当A a=new B()时,在栈里就有了一个a,而在堆里有个B的对象。。因为a是A类型的,所以它只能看到A里面所包含的属性和方法(此处的方法只是一个方法头,代码在代码区。。)。当调用show方法时,a先找到了自己的方法(头),然后到代码区去找方法体,发现有两个show方法.于是虚拟机会判断调用该方法的具体对象是什么,从而选择相应的方法。从而产生多态。而当调用say方法时,a没在自己代码里找到say方法,所以就不能通过了。。这也就解释了,为什么父类引用不能调用子类自己的方法了

技术分享

多态的内存分析-转载

标签:

原文地址:http://www.cnblogs.com/lonely-buffoon/p/5572931.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!