scala学习-基本语法4

类和对象2:
前面提到,Scala是面向对象的编程,且Scala不允许保护静态元素-静态方法和静态变量。意思是社么呢,就是我虽然使用Private 定义了变量,在外面我还是可以访问。

package org.wq.learn
object CheckSumAccumulator {
  def main(args:Array[String]):Unit={
    val c  = new CheckSumAccumulator()
    c.add(2)
    c.add(1)
    //可以访问私有变量
    println(c.sum)
  }
}

class CheckSumAccumulator {
  private var sum=0;
  def add(b:Byte):Unit  = sum += b
  def add2(b:Byte)=sum+b
  def checkSum():Int = ~(sum&0xff)+1
  //错误
  /*def add2(b:Byte):Unit={
    b=b+2

  }*/
}

如果想要实现,java的单列模式,Scala中定义了Singleton,使用object定义,它和类定义非常相似,只是用了关键字object。可以把Singleton对象看出java中定义静态成员的地方。且把这个对象是同名对象的伴侣对象,需要放在同一个文件,且对象和其伴侣对象可以互相访问对方的私有成员。

package org.wq.learn
object CheckSumAccumulator {
  def main(args:Array[String]):Unit={
    val c  = new CheckSumAccumulator()
    c.add(2)
    c.add(1)
    //可以访问私有变量
    println(CheckSumAccumulator.calculate("hello!word"))
    println(CheckSumAccumulator.cache)

  }
  //定义一个map缓存值,如过里面有s,那么直接放回s对于的值,没有的话,就存份进去
  private var 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
    }
  }


}

class CheckSumAccumulator {
  private var sum=0;
  def add(b:Byte):Unit  = sum += b
  def add2(b:Byte)=sum+b
  def checkSum():Int = ~(sum&0xff)+1
  //错误
  /*def add2(b:Byte):Unit={
    b=b+2

  }*/
}

Scala中的Singleton对象不仅仅作为静态对象的容器,在Scala中也是头等公民,如果仅仅定一个Singleton不会创建一个新的类,你不可以使用new定义类。如下面,会提示你,新建一个类。类定义,以后讲。
这里写图片描述
今天最后在提一下Scala中的Trait,他和java中的接口很想,但是Scala中的Trait可以实现方法。和C++中的抽象类相似,但是c++中的抽象类不允许集成多个抽象类。Scala中的Trati支持类和singleton和多个Trait混合(可以使用来自多个trait的方法)使用。

package org.wq.learn
object HelloWord extends  App{
  println("hellword");
}

上面的代码是,Scala为Singleton对象的main方法定义了一个Trait,只要继承这个Trait就可以不用显示的写main,也可以运行,这个Trait,是App。
列子有些是领路蜂上的……感谢~~下篇是Scala的基础类型的……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫二哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值