kotlin 接口和抽象类的使用

2022-11-18  本文已影响0人  Bfmall

一、接口的使用(1)

/**
 * DESC   : 接口的使用
 */

const val KtBaseInterfaceTest01_TAG = "KtBaseInterfaceTest01"

/**
 * USB接口类
 * 1.接口里面的所有成员和接口本身默认都是public open的,所以不需要手动去写open,这是接口的特殊性
 * 2.接口不能有主构造方法,反正也没有构造方法
 * 3.实现类不仅仅要重写接口的方法,也要重写接口的成员属性
 */
interface IUSB {
    //usb 版本信息
    var usbVersionInfo : String
    //usb 插入的设备
    var usbInsertDevice : String

    fun insertUSB() : String
}

/**
 * 鼠标类
 */
class Mouse(override var usbVersionInfo: String = "USB 3.0", override var usbInsertDevice: String = "鼠标接入了USB") : IUSB {

    override fun insertUSB(): String {
        return "Mouse...insertUSB==>usb version=$usbVersionInfo, insert device=$usbInsertDevice"
    }

}

/**
 * 键盘类
 */
class Keyboard : IUSB {

    //下面的set get都会持有field,现在是你没有给usbVersionInfo赋值,意味着field是无法让set和get持有的
    override var usbVersionInfo: String = "USB 3.1"
        get() = field
        set(value) {
            field = value
        }

    override var usbInsertDevice: String = "键盘接入了USB"
        get() = field
        set(value) {
            field = value
        }

    override fun insertUSB(): String {
        return "Keyboard...insertUSB==>usb version=$usbVersionInfo, insert device=$usbInsertDevice"
    }
}

class KtBaseInterfaceTest01 {

    fun testInterface01() {
        val mouse = Mouse("Usb 3.0", "鼠标插入USB")
        //testInterface01==>Mouse...insertUSB==>usb version=Usb 3.0, insert device=鼠标插入USB
        Log.d(KtBaseInterfaceTest01_TAG, "testInterface01==>"+mouse.insertUSB())

        val keyboard = Keyboard()
        //testInterface01==>Keyboard...insertUSB==>usb version=USB 3.1, insert device=键盘接入了USB
        Log.d(KtBaseInterfaceTest01_TAG, "testInterface01==>"+keyboard.insertUSB())
    }
}

二、接口和抽象类的使用(2)


/**
 * DESC   : 接口的使用
 */

const val KtBaseInterfaceTest02_TAG = "KtBaseInterfaceTest02"

/**
 * USB接口类
 * 1.接口里面的所有成员和接口本身默认都是public open的,所以不需要手动去写open,这是接口的特殊性
 * 2.接口不能有主构造方法,反正也没有构造方法
 * 3.实现类不仅仅要重写接口的方法,也要重写接口的成员属性
 */
interface IUSB2 {

    /**
     * 注意:
     * 1.接口var变量也是不能使用get()方法进行赋值的,(但是也有其他办法,使用val即可)
     * 2.任何类,接口等 val 代表只读,是不可以在后面赋值的,(但也有其他办法)
     */

    //usb 版本信息
    val usbVersionInfo : String
        get() = "USB " + (1..3).shuffled().first().toString() + ".0"

    //usb 插入的设备
    val usbInsertDevice : String
        get() = "高级设备插入了USB"

    fun insertUSB() : String
}

/**
 * 鼠标类
 */
class Mouse2 : IUSB2 {
    override var usbVersionInfo: String = super.usbVersionInfo

    override var usbInsertDevice: String = super.usbInsertDevice

    override fun insertUSB(): String {
        return "Mouse...insertUSB==>usb version=$usbVersionInfo, insert device=$usbInsertDevice"
    }

}

/**
 * 键盘类
 */
class Keyboard2() : IUSB2 {

    //下面的set get都会持有field,现在是你没有给usbVersionInfo赋值,意味着field是无法让set和get持有的
    override var usbVersionInfo: String = "USB 3.1"
        get() = field
        set(value) {
            field = value
        }

    override var usbInsertDevice: String = "键盘接入了USB"
        get() = field
        set(value) {
            field = value
        }

    override fun insertUSB(): String {
        return "Keyboard...insertUSB==>usb version=$usbVersionInfo, insert device=$usbInsertDevice"
    }
}


//--------------------------以下是抽象类------------------
abstract class BaseMouse {
    lateinit var mouseInfo : String

    //普通方法
    fun getMouseName() : String {
        return "鼠标"
    }

    //抽象方法
    abstract fun getMouseType()
}

class MouseA : BaseMouse() {

    /**
     * 普通方法不可重写
     */
    /*override fun getMouseName() {

    }*/

    override fun getMouseType() {
        mouseInfo = "型号 :mouseA 鼠标"
        Log.d(KtBaseInterfaceTest02_TAG, "getMouseType==>MouseA"+", mouseInfo="+mouseInfo)
    }

}

class KtBaseInterfaceTest02 {

    fun testInterface01() {
        val mouse = Mouse2()
        //testInterface01==>Mouse...insertUSB==>usb version=USB 1.0, insert device=高级设备插入了USB
        Log.d(KtBaseInterfaceTest02_TAG, "testInterface01==>"+mouse.insertUSB())

        val keyboard = Keyboard2()
        //testInterface01==>Keyboard...insertUSB==>usb version=USB 3.1, insert device=键盘接入了USB
        Log.d(KtBaseInterfaceTest02_TAG, "testInterface01==>"+keyboard.insertUSB())
    }

    fun testAbstract01() {
        val mouseA = MouseA()
        //mouseName=鼠标
        Log.d(KtBaseInterfaceTest02_TAG, "mouseName="+mouseA.getMouseName())
        //getMouseType==>MouseA, mouseInfo=型号 :mouseA 鼠标
        mouseA.getMouseType()
    }

}
上一篇 下一篇

猜你喜欢

热点阅读