Kotlin 匿名類實現介面和抽象類的區別詳解
阿新 • • 發佈:2020-03-17
我就廢話不多說了,還是上程式碼吧
介面:
interface OnBind { fun onBindChildViewData(holder: String,itemData: Any,position: Int) }
lesson.does(object : OnBind { override fun onBindChildViewData(holder: String,position: Int) { println(holder + itemData + position) } })
抽象類:
abstract class AbstractOnBind { abstract fun onBindChildViewData(holder: String,position: Int) }
lesson.does(object : AbstractOnBind() { override fun onBindChildViewData(holder: String,position: Int) { println(holder + itemData + position) } })
看到區別了嗎?哈哈,看不到沒關係,我告訴你。
他們之間唯一的區別就是呼叫時的下面這句,抽象類多了一個括號。
object : OnBind
object : AbstractOnBind()
就這麼一點區別,其實本質上是完全不一樣的。
在實現介面時,object 代替了 java 中 new 一個物件,在這裡“:“ 號後緊跟介面,介面沒有構造方法,代表了object實現了這個介面;
而在實現抽象類的時候,抽象方法後邊有(),可以理解為呼叫了抽象方法的構造方法,“new“出了一個物件後,賦給了object。
總結一下:為便於理解可以這麼想(實際原理可能並不是這樣),介面時,先有 object ,然後讓 object 實現該介面;抽象類時,先實現抽象類中的抽象方法,用構造方法構造出一個物件後,再給到 object
以上這篇Kotlin 匿名類實現介面和抽象類的區別詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。