首页 新闻 会员 周边

请教编译期和运行期的区别

0
悬赏园豆:10 [已解决问题] 解决于 2008-12-04 09:19

在学到设计原则"多组合,少继承"时,文中提到:

 继承的子类,实际上需要编译期确定下来。而组合却可以比继承灵活得多,可以在运行期才决定某个对象。

我想问一下,这里的编译期和运行期分别指什么意思?为什么通过组合就能在运行期决定某个对象呢? 谢谢~

Ryanism的主页 Ryanism | 初学一级 | 园豆:39
提问于:2008-12-03 09:41
< >
分享
最佳答案
0

简单来说:A从B继承,这一点是不能在运行期改变的。也就是说,你New出来一个A对象,那么,他一定具有B对象的特性和行为(当然不包括重写过的方法)。你在代码编译成执行文件后,就不能改变了。

但是,如果A组合了一个B对象。你就可以在运行时改变这一点。比如:你让A抓着一个B的子类而不是B来实现需要B完成的功能。这样为你的系统提供了更大的灵活性。

Colin Han | 老鸟四级 |园豆:3041 | 2008-12-03 13:32
其他回答(3)
0

继承的子类,实际上需要编译期确定下来:继承关系的对象,他们的特征是可以确定的。也就是他们的数据结构可以确定。
而组合(这个概念我不太懂),但结合实际的应用,抽象工厂里面都有用到。一个项目有SqlDataProvider,OracleDataProvider,但实际上数据访问会使用哪个Provider呢?一般是在config文件里面配置的。这肯定是运行期的咯

码尔代夫iimax | 园豆:3138 (老鸟四级) | 2008-12-03 09:51
0

以下这篇文章说的很详细,你可以看看

http://www.javaresearch.org/article/129963.htm

四眼蒙面侠 | 园豆:504 (小虾三级) | 2008-12-03 09:58
0

编译就是说在运行前都定好的东西

运行指的是在运行的时候才会去调用的东西

小眼睛老鼠 | 园豆:2731 (老鸟四级) | 2008-12-03 10:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册