接口可以包含抽象方法和普通方法。与抽象类的不同之处在于接口不能存储状态。它们可以拥有属性,但这些属性需要是抽象的或定义访问器
interface MyInterface {
fun bar() // 抽象方法
fun foo() { // 普通方法
// 方法实现
}
}
实现接口
class Child : MyInterface {
override fun bar() {
// 方法实现
}
}
接口属性
interface MyInterface {
val prop: Int // 抽象
val propertyWithImplementation: String // 带访问器
get() = "foo"
fun foo() {
print(prop)
}
}
class Child : MyInterface {
override val prop: Int = 29
}
继承接口
interface Named {
val name: String
val age : Int
}
interface Person : Named { // 继承Named
val firstName: String
val lastName: String
override val name: String get() = "$firstName $lastName" // 重写name属性
}
data class Employee(
override val firstName: String, // 重写firstName属性
override val lastName: String, // 重写lastName属性
override val age: Int // 重写age属性
) : Person // 实现Person
重写冲突
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()
}
}
对于类D
必须要重写foo()
和bar
方法,否则在使用时不知道到底要调用A
还是B
的方法
原文地址:https://blog.csdn.net/qq_40104261/article/details/134687353
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_33718.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。