- 入门背景
在Scala中,Trait是一种特殊概念。
首先,Trait可以被作为接口来使用,此时Trait与Java的接口比较类似。同时在Trait可以定义抽象方法,其与抽象类中的抽象方法一样,不给出方法的具体实现。
注意:类使用extends继承Trait,,在Scala中,无论继承类还是继承Trait都是用extends关键字。
关于的trait的基本概念就不再阐述了。
Trait用法
基础知识
1. 将trait作为接口使用
2.在trait 中定义具体的方法与字段 以及抽象字段
高级知识
1. 实例对象混入trait
2.trait链式调用(责任链设计模式)
3.trait 覆盖抽象方法
4. trait 具体方法与抽象方法的混合使用(模板设计模式)
基础知识
1. 将trait作为接口使用
package org.yonggan.trait01
trait SayHello {
def sayHello (name:String)
}
package org.yonggan.trait01
trait MakeFriends {
def mkFriends (p:Person)
}
package org.yonggan.trait01
class Person(var name:String) extends SayHello with MakeFriends {
def sayHello (otherName:String) = println("hello , "+otherName)
override def mkFriends(p: Person): Unit = {
println("hello (MakeFriends) : "+p.name +", i am " +name)
}
}
上述完成的基本的接口定义 注意在class 中继承多个trait 第一个使用 extends 后面跟着with
2.在trait 中定义具体的方法与字段 以及抽象字段
/**
* 实现日志打印功能
*/
trait Logger {
// val name :String = ""
var age: Int
def erro(msg:String)
def info(msg: String) {
println("Logger : ===> " + msg)
}
}
package org.yonggan.trait01
class Person(name: String) extends Logger {
def sayHello() = {
println("Person say: " + name)
info(name)
}
var age: Int = 23
override
def erro(msg: String): Unit = {
///xxxxxx
}
}