抽象類別匿名物件
如下代碼中,Pokemon為抽像類別。因為Pokemon不能產生物件,所以必需先使用 class Pikachu繼承Pokemon並實作其方法後,才能產生Pikachu。
fun main(args:Array<String>){
var p1=Pikachu()
p1.test()
}
abstract class Pokemon{
fun setLevel(){
println("設定level")
}
abstract fun test():Int
}
class Pikachu:Pokemon(){
override fun test(): Int {
println("實作test")
return 0
}
}
如果所要產生的Pikachu,在整個專案中只會出現一次,此時為了產生這唯一的一隻皮卡丘,就專門產生一個class Pikachu,然後才產生出物件,實在是很囉嗦。所以可以把class Pikachu直接省略,在主程式裏加上
object:Pokemon(){},然後將要實作的方法寫在 “{}” 區塊中。
這種寫法,並沒有class名稱,所以稱匿名類別。所以產生的物件也沒有型態可以參考,所以只能使用父類別當其型態參考。
fun main(args:Array<String>){
var p = object:Pokemon(){
override fun test():Int {
println("我是獨一無二的皮卡丘")
return 10
}
}
}
abstract class Pokemon{
fun setLevel(){
println("設定level")
}
abstract fun test():Int
}class Pikachu:Pokemon(){override fun test(): Int {println("實作test")return 0}}
介面匿名物件
同理,介面亦不能產生物件,所以要產生介面匿名物件,亦必需使用
object:Pokemon{},但與抽像類別不同,Pokemon後面,不可以加 “()” (建構子)
fun main(args:Array<String>){
var p=object:Pokemon{
override fun test(){
println("test")
}
}
}
interface Pokemon{
fun test()
}