美文网首页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