Kotlin 匿名类实现接口和抽象类的区别详解

时间:2021-05-20

我就废话不多说了,还是上代码吧

接口:

interface OnBind { fun onBindChildViewData(holder: String, itemData: Any, position: Int)} lesson.does(object : OnBind { override fun onBindChildViewData(holder: String, itemData: Any, position: Int) { println(holder + itemData + position) } })

抽象类:

abstract class AbstractOnBind { abstract fun onBindChildViewData(holder: String, itemData: Any, position: Int)} lesson.does(object : AbstractOnBind() { override fun onBindChildViewData(holder: String, itemData: Any, position: Int) { println(holder + itemData + position) } })

看到区别了吗?哈哈,看不到没关系,我告诉你。

他们之间唯一的区别就是调用时的下面这句,抽象类多了一个括号。

object : OnBind
object : AbstractOnBind()

就这么一点区别,其实本质上是完全不一样的。

在实现接口时,object 代替了 java 中 new 一个对象,在这里“:“ 号后紧跟接口,接口没有构造方法,代表了object实现了这个接口;

而在实现抽象类的时候,抽象方法后边有(),可以理解为调用了抽象方法的构造方法,“new“出了一个对象后,赋给了object。

总结一下:为便于理解可以这么想(实际原理可能并不是这样),接口时,先有 object ,然后让 object 实现该接口;抽象类时,先实现抽象类中的抽象方法,用构造方法构造出一个对象后,再给到 object

以上这篇Kotlin 匿名类实现接口和抽象类的区别详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章