在 kotlin 中,抽象类和接口有些相似。抽象类可以实现一部分协议,可以有状态和方法实现,必须由子类继承后使用;接口只是一种约定,没有状态,必须由类对接口进行实现使用。
接口和抽象类都不能实例化。
一个类只能继承一个父类,却可以继承多个接口。
从设计的角度看,抽象类反映本质,接口体现的是能力。
package com.cofox.kotlin
/**
* chapter01
* @Author: Jian Junbo
* @Email: junbojian@qq.com
* @Create: 2017/11/16 14:20
* Copyright (c) 2017 Jian Junbo All rights reserved.
*
* Description:
*/
interface InputDevice {
fun input(event: Any)
}
interface USBInputDevice : InputDevice {}
interface BLEInputDevice : InputDevice {}
fun main(args: Array<String>) {
val cc = NoteBook()
cc.input("U")
cc.run()
}
class NoteBook : Computer() {
override fun run() {
println("通电就运行")
}
}
abstract class Computer : USBInputDevice, BLEInputDevice {
override fun input(event: Any) {
println(this.javaClass.simpleName + " saying " + event)
}
abstract fun run()
}
运行结果
NoteBook saying U
通电就运行
再看一个例子
package com.cofox.kotlin
/**
* chapter01
* @Author: Jian Junbo
* @Email: junbojian@qq.com
* @Create: 2017/11/16 23:53
* Copyright (c) 2017 Jian Junbo All rights reserved.
*
* Description:
*/
interface fly{
var hight:Int
var distance:Int
}
interface call{
var voiceDB:Double
}
interface foot{
var footNumber:Int
}
interface breath{
var breathPerMin:Int
}
abstract class animal:breath{
override var breathPerMin: Int = 12
var mouth = 1
}
class bird(override var distance: Int, override var footNumber: Int, override var hight: Int, override var voiceDB: Double):animal(),fly,foot,call,breath{
/*override var hight: Int = 10
override var distance: Int = 10
override var footNumber: Int = 10
override var voiceDB: Double = 10.0*/
}
网友评论