trait DataSource {
var src : String
def read() : Boolean
def getString() : String
def printAll() {
while(this.read()) {
println(getString())
}
}
}
เราประกาศ trait DataSource ที่มี src เป็น string และยังไม่ได้กำหนดค่า และมี read() และ getString() เป็น abstract method ทั้งหมดนี้ subclass จะต้อง override ไม่เช่นนั้นจะ compile ไม่ผ่าน เราลองมาดู subclass กัน
class FileDataSource extends DataSource {
var src : String = "file"
val max = 5
var count : Int = 0
def read() :Boolean = {
count = count + 1
return count < max
}
def getString():String = { return src }
}
จะเห็นได้ว่า FileDataSource ได้ extends DataSource และ override read() กับ getString() รวมถึง กำหนดค่าให้กับ src และ max นอกจากนี้ยังเพิ่ม count เป็น data member ใหม่อีกด้วย ลองมาดูการทำงานกัน
object Hello {
def main(args: Array[String]) {
var a =new FileDataSource()
a.printAll()
}
}
โค๊ดข้างบนจะ พิมพ์
file
file
file
file
สำหรับบทความต่อไปเราจะมาดูวิธีการใช้ trait กันต่อ ในหัวข้อเรื่อง Mixin
ไม่มีความคิดเห็น:
แสดงความคิดเห็น