Kotlin抽象类和接口

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wd2014610/article/details/79775619

一、首先了解一下面向对象的基本概念
1.本质上就是解决如何用程序描述世界的问题
2.讨论如何把实际存在的东西映射成程序的类和对象
3.一种程序设计的思路、思想、方法
4.程序设计层面的概念
5.设计模式:前人的程序设计经验
6.一个类可以单继承(类)、多实现(接口)

二、下面来看一个例子

package net.println.kotlin.chapter4

/**
 * @author:wangdong
 * @description:接口继承一个接口,类实现一个接口(叫接口的实现类)
 */
/**定义一个父类的通用输入设备的接口*/
interface InputDevice {
    fun input(event: Any)
}

/**定义一个USB输入设备接口,继承InputDevice*/
interface USBInputDevice: InputDevice

/**定义一个蓝牙属于设备接口,继承InputDevice*/
interface BLUEInputDevice: InputDevice

/**定义一个鼠标,抽象类,相当于半成品*/
abstract class USBMouse(var name: String): USBInputDevice,OpticalMouse{
    override fun input(event: Any) {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
    }

    /**
     * Returns a string representation of the object.
     */
    override fun toString(): String {
        return name
    }
}

/**定义一个罗技的鼠标类*/
class LogitechMouse: USBMouse("罗技鼠标")

/**光电功能*/
interface OpticalMouse{

}


/**定义一个电脑类*/
class Computer{
    //添加USB输入设备
    fun addUSBInputDevice(inputDevice: USBInputDevice){
        //插入输入设备
        println("add USB input device: $inputDevice")
    }

    //添加蓝牙输入设备
    fun addBLUEInputDevice(inputDevice: BLUEInputDevice){
        //插入输入设备
        println("add Blue input device: $inputDevice")
    }

    //定义一个添加输入设备的接口
    fun addInputDevice(inputDevice: InputDevice){
        when(inputDevice){
            //是蓝牙设备
            is BLUEInputDevice ->{
                addBLUEInputDevice(inputDevice)
            }
            is USBInputDevice ->{
                addUSBInputDevice(inputDevice)
            }
            //除了蓝牙和usb,其余不支持
            else ->{
                throw IllegalArgumentException("输入设备不支持")
            }
        }
    }
}

/**写一个实例来操作一下*/
fun main(args: Array<String>) {
    //实例化一个电脑
    val computer = Computer()
    val mouse = LogitechMouse()
    computer.addInputDevice(mouse)
}

三、看一下接口和抽象类的区别
1.接口
不能有状态
必须得由类对其进行实现和使用
接口,直观理解就是一种约定
kotlin的接口与Objiect-C 的Protocol比较类似
举例:
输入设备的接口
interface InputDevice{
fun input(event: Any)
}

2.抽象类
实现了一部分协议的半成品
可以有状态、可以有方法的实现
必须由子类继承后才能使用

3.抽象类和接口的共性
比较抽象,不能直接实例化
如有需要之类,去继承抽象类,或者实现接口后使用
父类(接口)变量可以接受子类(实现类)的实例赋值

4.抽象类和接口的区别
抽象类有状态,接口没有状态
抽象类有方法实现,接口只能有无状态的默认实现
抽象类只能单继承,接口可以多实现
抽象类反映本质,接口体现能力

阅读更多
换一批

没有更多推荐了,返回首页