抽象类 & 特质

特质trait类似于Java中的接口,一个类可以同时继承多个trait,但是一次只能继承一个类。

trait和抽象类中,都可以定义没有赋值的字段,没有实现的方法,有实现的方法,在实现或继承的时候,必须给没有赋值的字段赋值,必须实现没有实现的方法,有实现的方法也可以重写。

继承class的关键字为extends,继承trait的关键字为with;当没有继承class,只继承trait时,用extends关键字。

package test

/**
  * @author: whua 
  * @create: 2018/10/08 09:23
  */
object ClassDemo {
  def main(args: Array[String]): Unit = {
    val human = new Humam
    println(human.name)
    println(human.distance)
    println(human.climb)
    println(human.fight)
  }
}

/**
  * 特质
  */
trait Flyable {
  // 声明一个没有赋值的字段
  val distance: Int

  //声明一个没有实现的方法
  def fight: String

  //声明一个实现的方法
  def fly: Unit = {
    println("I can fly")
  }
}

abstract class Animal {
  //声明一个没有赋值的字段
  val name: String

  //声明一个没有实现的方法
  def run(): String

  //声明一个有实现的方法
  def climb: String = {
    "I can climb"
  }
}

class Humam extends Animal with Flyable {
  override val name: String = "yingying"

  //重写抽象类中没有实现的方法
  override def run(): String = "I can run"

  // 重写抽象类中有实现的方法
  override def climb: String = "override climb"

  override val distance: Int = 1000

  // 实现特质中没有实现的方法,用不用override关键字都可以
  override def fight: String = "with bar"

  // 重写特质中有实现的方法
  override def fly: Unit = println("override fly")
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值