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

欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入

语法差异

至此,您可能会对语法的细节感到迷惑。毕竟 Scala 并未像 Java 语言那样将字段与方法区分开来。这实际上是一项深思熟虑的设计决策,允许 Scala 程序员轻而易举地向使用基类的用户 “隐藏” 字段和方法之间的差异。考虑清单 10:

清单 10. 我是什么?

// This is Scalaabstract class Person(val firstName:String, val lastName:String, val age:Int){ def doSomething def weight : Int override def toString = “[Person: firstName=”+firstName+” lastName=”+lastName+ ” age=”+age+”]”}class Student(firstName:String, lastName:String, age:Int, val subject:String) extends Person(firstName, lastName, age){ def weight : Int = age // students are notoriously skinny def doSomething = { System.out.println(“I’m studying hard, Ma, I swear! (Pass the beer, guys!)”) }}class Employee(firstName:String, lastName:String, age:Int) extends Person(firstName, lastName, age){ val weight : Int = age * 4 // Employees are not skinny at all def doSomething = { System.out.println(“I’m working hard, hon, I swear! (Pass the beer, guys!)”) }}

注意查看如何定义 weight 使其不带有任何参数并返回 Int.这是 “无参数方法”。因为它看上去与 Java 语言中的 “专有” 方法极其相似,Scala 实际上允许将 weight 定义为一种方法(如 Student 中所示),也允许将其定义为字段/存取器(如 Employee 中所示)。这种句法决策使您在抽象类继承的实现方面有一定的灵活性。请注意,在 Java 中,即便是在同一个类中,只有通过 get/set 方法来访问各字段时,才能获得类似的灵活性。不知道判断正确与否,但我认为只有少数 Java 程序员会用这种方式编写代码,因此不经常使用灵活性。此外,Scala 的方法可像处理公共成员一样轻松地处理隐藏/私有成员。

[1][2][3][4][5][6][7][8]

快乐不是因为拥有的多而是计较的少

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

相关文章:

你感兴趣的文章:

标签云: