美文网首页kotlin
22. 类、抽象类与接口

22. 类、抽象类与接口

作者: 厚土火焱 | 来源:发表于2017-11-17 00:39 被阅读66次

在 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*/
}

相关文章

网友评论

    本文标题:22. 类、抽象类与接口

    本文链接:https://www.haomeiwen.com/subject/pfnrvxtx.html