Kotlin 匿名类实现接口和抽象类的区别
2017-09-06 15:23
351 查看
上代码
接口:
抽象类:
看到区别了吗?哈哈,看不到没关系,我告诉你。
他们之间唯一的区别就是调用时的下面这句,抽象类多了一个括号。
object : OnBind
object : AbstractOnBind()
就这么一点区别,其实本质上是完全不一样的。
在实现接口时,object 代替了 java 中 new 一个对象,在这里“:“ 号后紧跟接口,接口没有构造方法,代表了object实现了这个接口;
而在实现抽象类的时候,抽象方法后边有(),可以理解为调用了抽象方法的构造方法,“new“出了一个对象后,赋给了object。
总结一下:为便于理解可以这么想(实际原理可能并不是这样),接口时,先有 object ,然后让 object 实现该接口;抽象类时,先实现抽象类中的抽象方法,用构造方法构造出一个对象后,再给到 object
接口:
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
相关文章推荐
- 抽象类、接口的区别 和 抽象类可以不实现接口的全部方法
- 抽象类、抽象方法、接口的区别及实现
- 关于java中继承抽象类和实现接口的区别
- 继承和实现的区别、重写和重载的区别,抽象类和接口的区别
- 抽象类、接口的区别 和 抽象类可以不实现接口的全部方法
- 面向对象多态的实现(抽象类Abstract和接口Interface的用法区别)
- 抽象类、接口的区别 和 抽象类可以不实现接口的全部方法
- 抽象类、接口的区别 和 抽象类可以不实现接口的全部方法
- 通过反射,将datatable转换为List集合(反射读取实体类的属性,并赋值),通过接口来实现MySql和MsSql数据的切换(二层反射),静态构造函数,抽象类和接口的区别
- 抽象类、接口的区别 和 抽象类可以不实现接口的全部方法
- java中抽象类和接口的一般实现和特殊实现(匿名类)
- Java基础知识强化18:抽象类、接口的区别 和 抽象类可以不实现接口的全部方法
- 抽象类和接口的区别
- asp.net 中类,继承,抽象类,接口的定义方法?还有区别是什么?
- 抽象类与接口的区别
- 抽象类和接口的区别
- 详细解析Java中抽象类和接口的区别
- Java中接口和抽象类的区别及使用的场合
- 解析Java中抽象类和接口的区别
- C#中抽象类和接口的区别