| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1856 人关注过本帖
标题:[分享]继承与多态的内存分析
只看楼主 加入收藏
huwangvs
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:764
专家分:0
注 册:2007-2-4
结帖率:0
收藏
 问题点数:0 回复次数:5 
[分享]继承与多态的内存分析

前几天看了个视频,是用内存分析的方法讲继承与多态。。感觉比较好理解。。就拿来分享一下。

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方法,所以就不能通过了。。这也就解释了,为什么父类引用不能调用子类自己的方法了。。

搜索更多相关主题的帖子: 多态 内存 public AAA 
2007-09-18 10:40
hwoarangzk
Rank: 4
来 自:冰封王座
等 级:贵宾
威 望:12
帖 子:1894
专家分:0
注 册:2007-7-17
收藏
得分:0 
多态就是这样的,先会去找所有符合方法名和参数列表的方法,然后再调用最接近该对象的那个方法,这就是多态了。
这里面虽然a是A类型的,但实际是指向B类型的,所以会打印出B而不是A

I'm here, as always...
2007-09-18 10:47
huwangvs
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:764
专家分:0
注 册:2007-2-4
收藏
得分:0 

还有前段时间讨论的子类this是否传给了父类。。我觉得子类和父类是同一个this,只是父类对这个this加了些限制。不能访问它的私有成员。。具体调用方法时,还是要看this实际是什么类型的。

2007-09-18 11:46
wshyj18
Rank: 1
等 级:新手上路
帖 子:124
专家分:0
注 册:2007-5-14
收藏
得分:0 
    多谢楼主拿出来

2007-09-18 11:52
菜鸟也疯狂
Rank: 1
等 级:新手上路
帖 子:134
专家分:0
注 册:2007-3-20
收藏
得分:0 

前段时间在哪儿看到,好像子类的this 和父类的this 是嵌套关系吧。不是很清楚,期待高手。


2007-09-18 22:07
xiaoyuyou
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-6-11
收藏
得分:0 
回复 楼主 huwangvs
楼主,能分享下视频的地址吗,谢谢
2012-06-11 00:44
快速回复:[分享]继承与多态的内存分析
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011384 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved