scala-类和对象-2

类和对象的定义

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 中的方法,而不是不违反单一继承的原则)

猜你喜欢

转载自blog.csdn.net/weixin_42521881/article/details/86534299
今日推荐