Scala知识点24---特质类

Scala特质类和JAVA的接口在意义上是一样的,下面看看怎么使用吧

package com.wy

trait LoggedTrait {
  // 该方法为实现的具体方法,无参数时括号可以省略
  def log = {
    println("记录日志……")
  }
}

class PersonForMixTrait(val name: String)  {
  def sayHello = {
    println("Hi, I'm " + this.name)
  }
}

object MixTraitTest{
  def main(args: Array[String]): Unit = {
    var person = new PersonForMixTrait("zhangsan")
    person.sayHello

    //这里演示的是编码时混入某个Trait,你也可以在类上直接继承
	//区别就在于混入时,只有person2这个对象拥有特质类中的东西,和person2的类型无关
	//在类上直接继承时,每一个对象都有特质类的东西
    var person2 = new PersonForMixTrait("lisi") with LoggedTrait
    person2.sayHello
    person2.log
  }
}

要注意的一点是特质类不可以被实例化

下面我们看看特质类的其他使用场景

package com.wy

trait HandlerTrait {
  def handle(data: String) = {println("last one")}
}

trait DataValidHandlerTrait extends HandlerTrait {
  override def handle(data: String) = {
    println("check data: " + data)
    super.handle(data)
  }
}
trait SignatureValidHandlerTrait extends HandlerTrait {
  override def handle(data: String) = {
    println("check signature: " + data)
    super.handle(data)
  }
}

//SignatureValidHandlerTrait的位置可以是类,但是with后面的必须都是特质类
class PersonForRespLine(val name: String) extends SignatureValidHandlerTrait with DataValidHandlerTrait {
  def sayHello = {
    println("Hello, " + this.name)
    this.handle(this.name)
  }
}

object PersonForRespLineTest{
  def main(args: Array[String]): Unit = {
    var person = new PersonForRespLine("kitty")
    person.sayHello
  }
}
package com.wy
//特质类可以使用抽象类的写法注意事项也和抽象类差不多
trait Trait_Service1 {

  var name:String = _
  var subname:String

  //抽象方法
  def printService1: Unit

  //非抽象方法
  def printInfo(): Unit ={
    println("pring Trait_Service1")
  }
}

前面说的多个特质类继承方式如下

package com.wy
//多个with一起使用
class Trait_ServiceImpl extends Trait_Service1 with Trait_Service2{
  override var subname: String = "subnmae1"

  override def printService1: Unit = {
    println("this is printService1!")
  }

  override def printService2: Unit = {
    println("this is printService2")
  }

  override def printInfo(): Unit ={
    println("print ------------------")
  }

}

多个特质类同时混入

val aaa= new AAA with AAAB with AAAC
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值