2008-04-01
<Java.JavaEE面试整理>(5)
关键字: 'is a' vs 'has a', composition vs aggregation
Q 09: 请谈谈你对'is a'和'has a'的理解?也就是继承与组合的理解?组合与聚合又有什么不同?
A 09: 'is a'的关系描述的OO中的继承,而'has a'描述的是OO中的组合方式.通过继承与组合,我们都可以在新类中使用已有代码.这里我们也说下,在OO中通常有两种主要的代码重用的方式:类的继承与对象的组合.
继承是单向的.例如,Hourse is a Building.而我们并不能说一个Building就一定是House.在Java中,我们用extends来表达继承.
组合:我们还用上面的例子来说,我们可说House里has a Bathroom,但我们不能说House就是一个Bathroom.说白了,组合就是在一个类中用一个instance variables来指向其它类的对象.我们例子中的House类就有一个instance variable,它指向Bathroon对象.
Q. 组合和继承,你更喜欢用哪一个?
这方面的一个准则是,我们只有在某一个类很明显的是另一类的子类时才用继承,其它场合尽量避免.
1,不要仅仅为了代码重用而使用继承.过度使用继承会在父类有变动时也牵连到过多的子类.
2,也不要仅仅为了多态而使用继承,而使用接口(Interface).
Q. 聚合与组合有什么不同?
聚合:聚合描述的是这样一种association,在这个association里,一个类是属于一collection.也就是说聚合说的是一种部分与整体的关系,而当部分离开整体时,两者都还有原来的实际意义.聚合是一种很弱的关联关系.
组合:与聚合相比,组合描述的是这样的关联关系,部分离开整体后就没有实际意义了.所以我们说组合是一种很强的关联关系.
A 09: 'is a'的关系描述的OO中的继承,而'has a'描述的是OO中的组合方式.通过继承与组合,我们都可以在新类中使用已有代码.这里我们也说下,在OO中通常有两种主要的代码重用的方式:类的继承与对象的组合.
继承是单向的.例如,Hourse is a Building.而我们并不能说一个Building就一定是House.在Java中,我们用extends来表达继承.
组合:我们还用上面的例子来说,我们可说House里has a Bathroom,但我们不能说House就是一个Bathroom.说白了,组合就是在一个类中用一个instance variables来指向其它类的对象.我们例子中的House类就有一个instance variable,它指向Bathroon对象.
Q. 组合和继承,你更喜欢用哪一个?
这方面的一个准则是,我们只有在某一个类很明显的是另一类的子类时才用继承,其它场合尽量避免.
1,不要仅仅为了代码重用而使用继承.过度使用继承会在父类有变动时也牵连到过多的子类.
2,也不要仅仅为了多态而使用继承,而使用接口(Interface).
Q. 聚合与组合有什么不同?
聚合:聚合描述的是这样一种association,在这个association里,一个类是属于一collection.也就是说聚合说的是一种部分与整体的关系,而当部分离开整体时,两者都还有原来的实际意义.聚合是一种很弱的关联关系.
组合:与聚合相比,组合描述的是这样的关联关系,部分离开整体后就没有实际意义了.所以我们说组合是一种很强的关联关系.
发表评论
- 浏览: 29403 次
- 性别:

- 来自: 北京

- 详细资料
搜索本博客
链接
最新评论
-
对浏览器中的context menu ...
Drag dropper
-- by whqida -
Spring中的load-time weav ...
没啥,有些class不在spring的管理之中,通过 load-time wea ...
-- by ray_linn -
对浏览器中的context menu ...
别搞笑了, 这是浏览器的 Context Menu? 这只不过是响应了鼠标右击事 ...
-- by fcoffee -
IE tab在Firefox里开发时 ...
firebug只能用于ff, 并不能用于ff下的ietab, 原因显而易见.如果 ...
-- by fcoffee -
IE tab在Firefox里开发时 ...
还网告知 该如何操作呢 我还是要到ie下再调试啊
-- by jianfeng008cn






评论排行榜