云星数据---Scala实战系列(精品版)】:Scala入门教程025-Scala实战源码-Scala 的特质 (接口)01

183 篇文章 0 订阅
64 篇文章 1 订阅

Scala 的特质 (接口)01

package scala_learn.demo06_trait

/**
 * Created by liguohua on 2017/3/1.
 */
class O1_TraitDemo {

}

object O1_TraitDemo {
  def main(args: Array[String]) {
    //创建对象
    var animal: Animal = new Dog
    //使用对象的字段
    println(animal.name + "\t" + animal.age + "\t" + animal.weight)
    //使用对象的方法
    animal.sleep
    animal.run


    println("*****************************************")
    //创建对象
    animal = new Cat
    //使用对象的字段
    println(animal.name + "\t" + animal.age + "\t" + animal.weight)
    //使用对象的方法
    animal.sleep
    animal.run

  }

}

//定义一个trait,代表一种特质,可以将它理解为java8中的接口
//特质是抽象的概念是不能直接创建实例的
trait Animal {
  //特质中定义了两个抽象的成员字段
  val name: String
  var age: Int
  //特质中定义了一个具体的成员字段(可以有具体字段)
  val weight = 18


  //特质中可以有具体方法
  def sleep(): Unit = {
    println("animal runing... !")
  }

  //特质中也可以有抽象的方法
  def run
}

//一个类去继承一个特质,就用有了这个特质的方法和字段
class Dog extends Animal {
  //特质中的抽象变量必须被重写,不然类要变成抽象类,override可以省略
  override val name: String = "wangcai"
  override var age: Int = 3

  //特质中的抽象方法要被重写,不然类要变成抽象类,override可以省略
  override def run: Unit = {
    println("dog runing...")
  }
}

//一个类必须先extends一个类后,才能with一个特质
class Cat extends Object with Animal {
  //特质中的抽象变量必须被重写,不然类要变成抽象类,override可以省略
  override val name: String = "ketty"
  override var age: Int = 5

  //特质中的抽象方法要被重写,不然类要变成抽象类,override可以省略
  override def run: Unit = {
    println("cat running ......")
  }


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值