类和对象的定义
class ChechsumAccumulator{
private var sum=0
def add(b:Byte):Unit = sum += b
def checkSum() :Int = ~(sum & 0xFF) +1
}
Scala 类的缺省修饰符为public
Scala方法的参数都是val类型,不能修改参数的值
对于不含返回值的方法,可以hulve掉=号,如果忘记了等号,那么函数就不会有返回值,返回Unit
对象
import scala.collection.mutable.Map
class ChecksumAccumulator{
private var sum=0
def add(b:Byte) :Unit = sum +=b
def checksum() : Int = ~ (sum & 0xFF) +1
}
object ChecksumAccumulator {
private val cache = Map [String, Int] ()
def calculate(s:String) : Int =
if(cache.contains(s))
cache(s)
else {
val acc=new ChecksumAccumulator
for( c <- s)
acc.add(c.toByte)
val cs=acc.checksum()
cache += ( s -> cs)
cs
}
}
println ( ChecksumAccumulator.calculate("Welcome to Scala Chinese community"))
- scala 不允许类保护静态元素,但是提供了单例对象singleton来实现这个功能。
- singleton 使用object来定义,使用方法和类十分相似。
- 单例对象的调用方法类似于java中的静态方法。
- 定义singleton对象不会创建一个新的类型,不可以使用new来创建一个新的singleton对象
- singleton对象不可以带参数
- 任何singleton对象,如果包含main方法,又可以作为应用的入口点
object HelloWorld {
def main(args: Array[String]) {
println(“Hello, world!”)
}
}
Trait
Scala 的 Trait 和 Java 的 Interface 相比,可以有方法的实现(这点有点像抽象类,但如果是抽象类,就不会允许继承多个抽象类)。Scala 的 Trait 支持类和 Singleton 对象以及多个 Trait 混合(使用来自这些 Trait 中的方法,而不是不违反单一继承的原则)