Kotlin 匿名类实现接口和抽象类的区别详解
我就废话不多说了,还是上代码吧
接口:
interfaceOnBind{ funonBindChildViewData(holder:String,itemData:Any,position:Int) }
lesson.does(object:OnBind{ overridefunonBindChildViewData(holder:String,itemData:Any,position:Int){ println(holder+itemData+position) } })
抽象类:
abstractclassAbstractOnBind{ abstractfunonBindChildViewData(holder:String,itemData:Any,position:Int) }
lesson.does(object:AbstractOnBind(){ overridefunonBindChildViewData(holder:String,itemData:Any,position:Int){ println(holder+itemData+position) } })
看到区别了吗?哈哈,看不到没关系,我告诉你。
他们之间唯一的区别就是调用时的下面这句,抽象类多了一个括号。
object:OnBind
object:AbstractOnBind()
就这么一点区别,其实本质上是完全不一样的。
在实现接口时,object代替了java中new一个对象,在这里“:“号后紧跟接口,接口没有构造方法,代表了object实现了这个接口;
而在实现抽象类的时候,抽象方法后边有(),可以理解为调用了抽象方法的构造方法,“new“出了一个对象后,赋给了object。
总结一下:为便于理解可以这么想(实际原理可能并不是这样),接口时,先有object,然后让object实现该接口;抽象类时,先实现抽象类中的抽象方法,用构造方法构造出一个对象后,再给到object
以上这篇Kotlin匿名类实现接口和抽象类的区别详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。