scala特质可以同时拥有抽象方法和具体方法,类可以实现多个特质
当接口使用的特质
trait Logger{
def log(msg:String)//这是个抽象方法,特质中未被实现的方法默认为抽象方法,无需使用abstract
}
//子类实现特质
class ConsoleLogger extends Logger{//用extends而不是implements
def log(msg:String){println(msg)}//不需需要写override
}
如果需要的特质不止一个,可以用with关键字来添加额外的特质:
class ConsoleLogger extends Logger with Cloneable with Serializable
所有java接口都可以作为scala特质来使用,和java一样,scala类只能有一个超类,但可以有任意数量的物质
带具体实现的特质
trait ConsoleLogger{
def log(msg:String){println(msg)}
}
class SavingAccount extends Account with ConsoleLogger{
def withdraw(amount:Double){
if(amount > balance) log("Insufficient funds")
else balance -= amount
}
}