快速业务通道

面向Java开发人员的Scala指南 - 实现继承 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20

面向Java开发人员的Scala指南 - 实现继承

时间:2011-01-30 IBM Ted Neward

近十几年来,面向对象语言设计的要素一直是继承的核心。不支持继承的语言(如 Visual Basic)被嘲讽是 “玩具语言” ,不适合真正的工作。与此同时,支持继承的语言所采用的支持方法五花八门,导致了许多争论。多重继承是否真的必不可少(就像 C++ 的创作者认定的那样),它是否不必要而丑陋的(就像 C# 和 Java 的创作者坚信的那样)?Ruby 和 Scala 是两种较新的语言,采取了多重继承的这种方法 — 正如我在上期介绍 Scala 的特征时所讨论的那样(参见 参考资料)。

与所有 杰出的语言一样,Scala 也支持实现继承(参见 参考资料)。在 Java 语言中,单一实现继承模型允许您扩展基类,添加新方法和字段等。尽管存在某些句法变更,Scala 的实现继承依然类似于 Java 语言中的实现。不同的是 Scala 融合了对象和函数语言设计,这非常值得我们在本期文章中进行讨论。

普通 Scala 对象

与本系列之前的文章类似,我将使用 Person 类作为起点,探索 Scala 的继承系统。清单 1 展示了 Person 的类定义:

清单 1. 嘿,我是人类

// This is Scala class Person(val firstName:String, val lastName:String, val age:Int) {   def toString = "[Person: firstName="+firstName+" lastName="+lastName+              " age="+age+"]" }

Person 是一个非常简单的 POSO(普通 Scala 对象,Plain Old Scala Object),具有三个只读字段。您可能会想起,要使这些字段可以读写,只需将主构造函数声明中的 val 更改为 var 即可

无论如何,使用 Person 类型也非常简单,如清单 2 所示:

清单 2. PersonApp

// This is Scala object PersonApp {   def main(args : Array[String]) : Unit =   {    val bindi = new Person("Tabinda", "Khan", 38)    System.out.println(bindi)   } }

这算不上什么令人惊讶的代码,但给我们提供了一个起点。

面向Java开发人员的Scala指南 - 实现继承(2)

时间:2011-01-30 IBM Ted Neward

Scala 中的抽象方法

随着该系统的发展,越来越明显地意识到 Person 类缺乏一个成为 Person 的重要部分,这个部分是做些事情 的行为。许多人都会根据我们在生活中的作为来定义自己,而不是根据现有和占用的空间。因此,我会添加一个新方法,如清单 3 所示,这赋予了 Person 一些意义:

清单 3. 很好,做些事情!

// This is Scala class Person(val firstName:String, val lastName:String, val age:Int) {   override def toString = "[Person: firstName="+firstName+" lastName="+lastName+               " age="+age+"]"   def doSomething = // uh.... what? }

这带来了一个问题:Person 的用途究竟是什么?有些 Person 绘画,有些唱歌,有些编写代码,有些玩视频游戏,有些什么也不做(问问十几岁青少年的父母)。因此,我会为 Person 创建 子类,而不是尝试去将这些活动直接整合到 Person 本身之中,如清单 4 所示:

清单 4. 这个人做的事情很少

// This is Scala class Person(val firstName:String, val lastName:String, val age:Int) {   override def toString = "[Person: firstName="+firstName+" lastName="+lastName+               " age="+age+"]"   def doSomething = // uh.... what? } class Student(firstName:String, lastName:String, age:Int)   extends Person(firstName,

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号