Scala学习 --------- 抽象类型、特质

75 篇文章 0 订阅
29 篇文章 0 订阅

抽象类定义

概念:如果你在类中定义了抽象字段或抽象方法,那就一定是抽象类

abstract class Animal {
  //抽象字段
   var name:String
  //抽象方法
   def eat()
}

注意:

1、抽象类中既可以又抽象成员又可以又普通成员

2、子类必须实现特质的抽象成员

特质定义

trait Person {

}

理解:

1、类似接口,比接口丰富,既可以又抽象成员又可以又普通成员

/**
  * 特质
  */
trait Person {
  //普通的属性
   var name:String="zhangsan"
   def resume={}
   //抽象
   var age:Int
   def resume1
}

2、特质有构造方法

3、子类可以混入多个特质,解决单继承问题

4、子类必须实现特质的抽象成员

特质案例

/**
  * 特质
  */
trait Person {
  //普通的属性
   var name:String="zhangsan"
   def resume={}
   //抽象
   var age:Int
   def resume1
}
class Student extends Person {
  //必须实现抽象成员 ctrl+o
  override var age: Int = 12
  override def resume1: Unit = {
    print("我的自我介绍!")
  }
}
object Test{
  def main(args: Array[String]): Unit = {
    //创建Student
    val st1=new Student
    st1.resume1
  }
}

混入多特质案例 extends with

trait MoneyWebLog {
  //抽象方法:实现收集财务系统的日志
  def MoneyLog
}
trait OAWebLog {
  //抽象方法:实现收集财务系统的日志
  def MoneyLog
}
trait OAWebLog {
  //抽象方法:实现收集OA系统的日志
  def OALog
}
trait PayWebLog {
  //抽象方法:实现收集支付系统的日志
  def PayLog
}
package com.zzk2

class LogTool extends MoneyWebLog with OAWebLog with PayWebLog {

  override def MoneyLog: Unit = {
    print("收集财务日志")
  }

  override def OALog: Unit = {
    print("收集OA日志")
  }

  override def PayLog: Unit = {
    print("收集Pay日志")
  }
}
object Test{
  def main(args: Array[String]): Unit = {
    val log=new LogTool
    log.MoneyLog
    log.OALog
    log.PayLog
  }
}

特质构造方法执行顺序

先初始化特质,由左向右初始化构造方法

最后初始化自己的构造方法,创建实例

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值