Scala學習 --------- 抽象型別、特質
阿新 • • 發佈:2018-11-23
抽象類定義
概念:如果你在類中定義了抽象欄位或抽象方法,那就一定是抽象類
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 } }
特質構造方法執行順序
先初始化特質,由左向右初始化構造方法
最後初始化自己的構造方法,建立例項