面向Java开发人员的Scala指南 - 实现继承 - 编程入门网
为值,这样您就可以在运行时需要切换功能的时候利用函数值。可将这种方法视为角色模式 —— Gang of Four 战略模式的一种变体,在这种模式中,对象角色(例如 Person 的当前就职状态)作为运行时值得到了更好的表现,比静态类型的层次结构更好。
面向Java开发人员的Scala指南 - 实现继承(4)时间:2011-01-30 IBM Ted Neward层次结构上层的构造函数 回忆一下编写 Java 代码的日子,有时继承类需要从构造函数传递参数至基类构造函数,从而使基类字段能够初始化。在 Scala 中,由于主构造函数出现在类声明中,不再是类的 “传统” 成员,因而将参数传递到基类将成为一个全新维度的问题。 在 Scala 中,主构造函数的参数在 class 行传递,但您也可以为这些参数使用 val 修饰符,以便在类本身上轻松引入读值器(对于 var,则为写值器)。 因此,清单 5 中的 Scala 类 Person 转变为清单 7 中的 Java 类,使用 javap 查看: 清单 7. 请翻译一下
JVM 的基本规则依然有效:Person 的继承类在构造时向基类传递某些内容,而不管语言强调的是什么。(实际上,这并非完全 正确,但在语言尝试规避此规则时,JVM 会表现失常,因此大多数语言仍然坚持通过某种方法为其提供支持。)当然,Scala 需要坚守此规则,因为它不仅需要保持 JVM 正常运作,而且还要保持 Java 基类正常运作。这也就是说,无论如何,Scala 必须实现一种语法,允许继承类调用基类,同时保留允许我们在基类上引入读值器和写值器的语法。 为了将此放到更具体的上下文中,假设我通过以下方式编写了 清单 5 中的 Student 类: 清单 8. 坏学生!
本例中的编译器将运行很长一段时间,因为我尝试为 Student 类引入一组新方法(firstName、lastName 和 age)。这些方法将与 Person 类上名称类似的方法彼此冲突,Scala 编译器不一定了解我是否正在尝试覆盖基类方法(这很糟糕,因为我可以在这些基类方法后隐藏实现和字段),或者引入相同名称的新方法(这也很糟糕,因为我可以在这些基类方法后隐藏实现和字段)。简而言之,您将看到如何成功覆盖来自基类的方法,但那并不是我们目前要追求的目标。 您还应注意到,在 Scala 中,Person 构造函数的参数不必一对一地与传递给 Student 的参数联系起来;这里的规则实际上与 Java 构造函数的规则完全相同。我们这样做只是为了便于阅读。同样,Student 可要求额外的构造函数参数,与在 Java 语言中一样,如清单 9 所示: 清单 9. 苛求的学生!
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |