作者swpoker (swpoker)
看板java
标题Re: [问题] 父变数指到子物件的继承问题
时间Mon Apr 29 15:32:23 2013
你把物件的实体跟参考混在一起了
还有JAVA是不会让你知道记忆体的东西
也不会让你知道物件在记忆体的实际配置的
所以我们只看的到物件
不要再去管什麽记忆体了
那不关你的事也不关我的事
你这个问题
在JAVA的参考书里面关於物件生成的流程可以解释你的问题
(我上课的时候把那个流程图看了很久 不过那是1.4版 还是SUN出的教科书)
所谓
Father f = new Son()
这句话
Father代表的某种参考的规格是什麽
f为一个参考
new 表示要建构一个物件
Son()为建构一个实际物件的规格是什麽
所以Father只是一个用来参考的规格而已
实际上呼叫的变数函式范围是以Son为主
而继承是可用来做为该物件规格的预设值
既然都是预设了所以也可以更改的
在此要注意的是范围的界定
不要去计较倒底是父还是子(因为继承可以很多层)
只要注意的该变数函式的范围是在哪一个类别的范围
例如
Father f = new Son();
f.show();
实际上呼叫的方式为
先去该真正连结的物件的类别(规格)中找看看有没有show的函式
所以是去Son的类别找看看有没有show的函式
如果没有的话
就去Son的上一层看看有没有
没有的话
再去Son的上一层的上一层看有没有
...
然後就会在某层(个)类别中找到该show之後
就去执行他
结论就是不要再去关心记忆体了
那不干你跟我的事
※ 引述《Shrugg (泪眼问花花不语)》之铭言:
: 对不起,又碰到观念性问题想不通了,所以藉休息思考时间又来这边寻找温情.嘻
: 请问当程式跑到 Father f = new Son()後,从记忆体来看
: 不是就一个Stack区的变数f指向Heap区的一个Son物件吗?
: 如果这时候执行f.show() 为什麽IntelliSense只能选择父类别里的show()?
: 但是如果父类跟子类同时有定义show(),即使选用的是父类的show()
: 却是显示子类show()的内容呢?
: 从物件来看,父类跟子类会有不同的方法跟成员变数,可以理解是不同的东西
: 但是变数的目的不是存值就是存参照,变数为什麽会有父跟子的区分呢?
: 谢谢.
--
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 163.29.28.131
1F:→ andymai:不管记忆体?乱写乱设计乱配置也是会out of memory的耶... 04/29 21:13
2F:推 PsMonkey:囧? 敢问要怎麽配置.... @_@ 04/29 22:30
3F:→ cha122977:某些平台或情况吧 像是Android没弄好常常发生... 04/29 23:37
4F:推 s3748679:对1楼感兴趣+1 04/30 01:52
5F:→ swpoker:只要乱乱写就会有~但跟"配置记忆体"无关,是程式的物件架构 04/30 12:47
6F:→ swpoker:所以还是回归要怎麽设计物件架构这个问题~例如flyweight? 04/30 13:01
7F:→ swpoker:版上有人问过 "物件"的记忆体有多大?区块在那里?怎麽释放? 04/30 13:38
8F:→ cha122977:Java的设计宗旨(&优势)就是不要去管这些东西 04/30 15:59
9F:→ andymai:囧 其实我讲的是"配置物件"~至少要注意一下生命周期吧... 04/30 19:22
10F:→ swpoker:楼上对不起!!我误会你啦!! 05/01 08:46
11F:→ realmeat:over heap的问题是会有的, 不过是在jvm承受不起的状况 05/02 23:49