Kotlin 匿名类实现接口和抽象类的区别详解
我就废话不多说了,还是上代码吧
接口:
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 匿名类实现接口和抽象类的区别详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
AndroidStudio接入Unity工程并实现相互跳转的示例代码
这篇文章主要介绍了AndroidStudio接入Unity工程并实现相互跳转,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-12-12Android性能优化之RecyclerView分页加载组件功能详解
这篇文章主要为大家介绍了Android性能优化之RecyclerView分页加载组件功能详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-09-09Android 开发中根据搜索内容实现TextView中的文字部分加粗
最近遇到一个需求,需要做一个搜索功能。搜索的内容需要加粗显示。实现方法很简单,下面通过本文给大家分享Android 开发中根据搜索内容实现TextView中的文字部分加粗样式,非常不错,需要的朋友参考下2017-03-03
最新评论