Kotlin Reference (十) Interfaces
most from reference
接口
Kotlin中的接口非常类似于Java8,它们可以包含抽象方法的声明以及方法实现。与抽象类不同的是接口不能存储状态。它们可以具有属性,但这些需要是抽象的或提供访问器。
使用interface关键字定义接口
interface MyInterface {
fun bar()
fun foo() {
// optional body
}
}
实现接口
类或对象可以实现一个或多个接口
class Child : MyInterface {
override fun bar() {
// body
}
}
接口属性
您可以在接口中声明属性。在接口中声明的属性可以是抽象的,也可以实体访问器。在接口中声明的属性不能有后备字段,因此在接口中声明的访问器不能引用他们。
interface MyInterface {
val prop: Int // abstract
val propertyWithImplementation: String
get() = "foo"
fun foo() {
print(prop)
}
}
class Child : MyInterface {
override val prop: Int = 29
}
复写冲突
当我们在超类类型列表中声明很多类型时,可能会出现我们继承同一方法的多个实现,例如:
interface A {
fun foo() { print("A") }
fun bar()
}
interface B {
fun foo() { print("B") }
fun bar() { print("bar") }
}
class C : A {
override fun bar() { print("bar") }
}
class D : A, B {
override fun foo() {
super<A>.foo()
super<B>.foo()
}
override fun bar() {
super<B>.bar()
}
}
接口A和B都声明了函数foo()和bar(),它们都实现了foo(),但只有B实现了bar()(bar()在A中没有标记为abstract,因为如果没有函数体,这是函数的默认值)。现在,如果我们定义一个类C实现A接口,我们必须重写bar()并提供一个实现。
然而,如果我们定义一个类D实现A和B接口,我们需要实现多个接口所有的方法,并指定D应该如何实现它们。此规则既适用于继承单个实现(bar())和多个实现(foo())的方法。
Kotlin Reference (十) Interfaces的更多相关文章
- Kotlin Reference (十二) Extensions
most from reference Kotlin与C#和Gosu类似,提供了扩展一个新功能的类,而不必继承类或使用任何类型的设计模式,如Decorator(装饰者模式).这是通过称为扩展的特殊声明 ...
- Kotlin Reference (十一) Visibility Modifiers
most from reference 类,对象,接口,构造函数,函数,属性及setters具有可见性修饰符(getter总是具有和属性一样的可见性).在kotlin中油4个可视化修饰符:privat ...
- Kotlin Reference (九) Properties and Fields
most from reference 声明属性 Koltin的类都有属性,这些属性可以声明为可变的,使用var关键字或用val关键字生声明不可变属性. class Address { var nam ...
- Kotlin Reference (八) Classes and Objects
most from reference 类 Kotlin的类的声明使用关键字class class Invoice { } 类声明由类名.类头(指定其类型参数,构造函数等)和类体组成,由大括号括起来. ...
- Kotlin Reference (七) Returns and Jumps
most from reference kotlin有三个结构跳跃表达式 return 默认情况下,从最近的封闭函数或匿名函数返回. break 跳出整个循环 continue 跳出本次循环,进行下一 ...
- Kotlin Reference (六) Control Flow
most from reference if表达式 在kotlin中,if是一个表达式,即它返回一个值.kotlin中没有Java中的三元运算符. // Traditional usage var m ...
- Kotlin Reference (五) Packages
most from reference 包 源文件可以从包声明开始: package foo.bar fun baz() {} class Goo {} // ... 源文件的所有内容(如类和函数)都 ...
- Kotlin Reference (四) Basic Types
most from reference 基本类型 在kotlin中,一切都是对象,我们可以在任何变量上调用成员函数和属性.一些类型可以具有特殊的内部表示:例如,数字.字符和布尔值都可以在运行时被表示为 ...
- Kotlin Reference (三) Coding Conventions
most from reference 命名规则 1.使用驼峰式命名规则,尽量避免在命名中使用下划线 2.类型以大写字母开头 3.方法和属性以小写字母开头 4.使用4个空格缩进 5.public的方法 ...
随机推荐
- IScroll5中文API整理,用法与参考
IScroll是移动页面上被使用的一款仿系统滚动插件.IScroll5相对于之前的IScroll4改进了许多,使得大家可以更方便的定制所需的功能了. 做项目的时候正好用到了这个插件,自己做了一下总结, ...
- Executor框架与Thread
Executor将线程的创建和线程的执行解耦,比较下面两个例子: 1:TaskExecutionWebServer.java package chapter06; import java.io.IOE ...
- hive两大表关联优化试验
呼叫结果(call_result)与销售历史(sale_history)的join优化: CALL_RESULT: 32亿条/444G SALE_HISTORY:17亿条/439G 原逻辑 Map: ...
- linux改变apt-get安装源
最近自己装了个ubuntu kylin 在使用的过程中发现,系统的apt-get 的源有毛病,总是安装不了软件. 感觉应该是传说中的墙的原因,所以准备换到阿里云的源. 下面是步骤: 1.复制原文件备份 ...
- 470. Implement Rand10() Using Rand7() (拒绝采样Reject Sampling)
1. 问题 已提供一个Rand7()的API可以随机生成1到7的数字,使用Rand7实现Rand10,Rand10可以随机生成1到10的数字. 2. 思路 简单说: (1)通过(Rand N - 1) ...
- python遗留问题
def assert_element_in_page_source(s): print type(s) print s #assert s in driver.page_sourcecommand=' ...
- extern--C#调用C++等其他非托管代码
例如: https://www.cnblogs.com/sosoft/p/extern.html
- HDU4642
#include<stdio.h> #include<string.h> int main() { int i,j,n,m; int t; scanf("%d&quo ...
- PHP获取代码段执行的毫秒时间和消耗内存
我们在项目开发经常需要做一些优化型测试,比如优化代码段,排查代码段效率问题,或者降低内存消耗成本. <?php $start_memory = memory_get_usage(); //开始内 ...
- 这才是官方的tapable中文文档
起因 搜索引擎搜索tapable中文文档,你会看见各种翻译,点进去一看,确实是官方的文档翻译过来的,但是webpack的文档确实还有很多需要改进的地方,既然是开源的为什么不去github上的tapab ...