Kotlin——抽象类和接口
来源:互联网 发布:网络整合营销 编辑:程序博客网 时间:2024/06/05 19:32
抽象类
一个类和它的一些成员可以声明为abstract。类中抽象的成员没有实现。需要注意的是,我们不需要用open显式注解抽象类或函数。
我们可以用一个非抽象的open函数覆写一个抽象的函数。
open class Base { open fun f() { }}abstract class Derived : Base() { override abstract fun f()}
接口
Kotlin中的接口和Java 8中的类似。它们可以包含抽象方法的声明,或者实现也可以。和抽象类的区别在于接口不能保存状态。它们可以具有属性,但这些需要是抽象的或提供访问器实现。
接口的定义使用关键字interface
interface MyInterface{ fun bar() fun foo(){ println("MyInterface.foo") }}
实现接口
一个类或对象可以实现一个或多个接口。
class ChildOfInterface : MyInterface { override fun bar() { foo() } override fun foo() { super.foo() println("ChildOfInterface.foo") }}
接口中的属性
接口中是可以声明属性的。接口中的声明既可以是抽象的,也可以提供getter和setter。接口中的属性不能有后备字段,因此接口中的getter或setter不能引用它们。
interface MyInterface { val prop: Int //抽象的 val propertyWithImplementation: String get() = "abc" fun bar() fun foo() { println("MyInterface.foo") }}class ChildOfInterface : MyInterface { override val prop: Int get() = 3 override fun bar() { foo() } override fun foo() { super.foo() println("ChildOfInterface.foo") }}
也就是说接口的定义的属性默认也是要覆写的,如果不想子类覆写,那么需要提供get()设置值,并且只能使用get()来提供初始值。
解决覆写冲突
当我们继承了很多父类时,可能会出现继承了同一个方法的多个实现。举个例子:
interface A { fun foo() { println("A") } fun bar()}interface B { fun foo() { println("B") } fun bar() { println("bar") }}class C : A { override fun bar() { println("C.bar") }}class D : A, B { override fun foo() { super<A>.foo() super<B>.foo() println("D.foo") } override fun bar() { super<B>.bar() }}fun main(args: Array<String>) { var d = D() d.foo() d.bar()}
这个在继承中有讲到,这儿就不赘述了。
阅读全文
0 1
- Kotlin——抽象类和接口
- Kotlin-抽象类和接口
- Kotlin 匿名类实现接口和抽象类的区别
- Kotlin基本使用-抽象类及接口
- Kotlin学习(四)—— 类和对象,继承,覆盖,抽象类,属性和字段,接口,可见性修饰符,扩展
- C#——接口和抽象类
- Java——接口和抽象类
- C#——抽象类和接口
- Java——抽象类和接口
- 基础知识——接口和抽象类
- JAVA——抽象类和接口
- 抽象类和接口——Java
- 黑马程序员—抽象类和接口
- 黑马程序员—抽象类和接口
- 抽象接口和抽象类
- Java基础——Java的抽象机制,抽象方法抽象类和接口
- 接口和抽象类
- 接口和抽象类
- Ubuntu如何修改系統文件
- MongoDB Java使用指南
- HDU
- 应用缓存(Application Cache)
- jdk环境变量配置&&记事本写程序在cmd执行
- Kotlin——抽象类和接口
- 步进电机的线速度控制
- 共享内存
- 空对象调用属性或方法,equals();;StringBuffer简单用法,字符串的追加,插入和替换。
- 《leetCode》:Longest Common Prefix
- LWLR 局部加权线性回归---Python实现
- 一位资深程序员大牛给予Java初学者的学习路线建议
- java编程思想笔记-并发之线程加入
- LinuxC简谈之字符串函数及其实现