组合与继承是利用其它现存类定义新类的两个方法。如果你接下来的工作主要是代码重用,通常你应采用组合而不是继承。只有继承受脆基类问题之苦,这种情况你可能会无意中通过改变超类而破坏了子类。
网页设计是网站建设的前奏,好的网页设计更深度的剖析产品和设计风格定位,结合最新的网页设计流行趋势,与WVI应用标准,设计出具企业表现力,大器而深稳的网站界面设。创新互联公司公司2013年成立,是成都网站建设公司:提供企业网站设计,品牌网站建设,营销型企业网站建设方案,成都响应式网站建设,成都微信小程序,专业建站公司做网站。
编辑推荐:Scala编程语言专题
关于继承关系你可以问自己一个问题,是否它建模了一个is-a关系。Meyers,《Effective C++》 【Mey91】例如,说ArrayElement是Element是合理的。你能问的另一个问题是,是否客户想要把子类类型当作超类类型来用。Eckel,《Thinking in Java》【Eck98】在ArrayElement的例子里,我们的确期待客户会想要把ArrayElement当作Element使用。
如果你对展示在图释10.3的继承关系问了这些的问题,那么是否感觉其中的任何关系有可疑吗?尤其是,对你来说LineElement是ArrayElement是否显而易见呢?你是否认为客户会需要把LineElement当作ArrayElement使用?实际上,我们把LineElement定义为ArrayElement主要是想重用ArrayElement的contents定义。因此或许把LineElement定义为Element的直接子类会更好一些,就像这样:
- class LineElement(s: String) extends Element {
- val contents = Array(s)
- override def width = s.length
- override def height = 1
- }
前一个版本中,LineElement与ArrayElement有一个继承关系,从那里继承了contents。现在它与Array有一个组合关系:在它自己的contents字段中持有一个字串数组的引用。
类ArrayElement也与Array有组合关系,因为它的参数化contents字段持有字串数组的引用。ArrayElement的代码展示在第xx页的代码10.5中。其组合关系用一个菱形表现在类图中,正如展示在第xx页的图释10.1中那样。有了LineElement的这个实现,Element的继承层级现在看上去如展示在图释10.4中那样。
图释 10.4 修改了LineElement后的类层级
【相关阅读】
文章标题:Scala学习:使用组合与继承
文章出自:http://www.mswzjz.cn/qtweb/news20/255570.html
攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能