美文网首页
kotlin 接口和抽象类的使用

kotlin 接口和抽象类的使用

作者: Bfmall | 来源:发表于2022-11-18 22:11 被阅读0次

一、接口的使用(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()
    }

}

相关文章

  • About Kotlin-Kotlin中的类2

    About Kotlin(2) 继续昨天的部分。介绍Kotlin中的类。 Kotlin中的类 抽象类和接口 抽象类...

  • 抽象类和接口

    接口:代表的是事物的能力抽象类:反映的是事物的本质 kotlin中的接口 kotlin中的抽象类 kotlin中实...

  • Kotlin学习之抽象类和接口

    Kotlin学习之抽象类和接口 抽象类和接口是面向对象的高级特性。 一、抽象类 类和其中的某些成员可以声明为abs...

  • Kotlin 类2 - 抽象类与接口

    Kotlin 类2 - 抽象类与接口 1. Kotlin 类、抽象类、接口的规则: 「单继承多现实」即一个类只可以...

  • 22. 类、抽象类与接口

    在 kotlin 中,抽象类和接口有些相似。抽象类可以实现一部分协议,可以有状态和方法实现,必须由子类继承后使用;...

  • kotlin 接口和抽象类的使用

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

  • Spring的学习

    接口和抽象类? 抽象类和接口的区别在于使用动机。使用抽象类是为了代码的复用,而使用接口的动机是为了实现多态性。1....

  • Android_开发_Day12_抽象类和接口

    Android_开发Day12抽象类和接口 目的: 知道什么是抽象类,什么是接口,学会抽象类的使用,与接口的使用。...

  • Kotlin 小细节记录(6)

    100-Kotlin语言的接口定义101-Kotlin语言的接口的默认实现102-Kotlin语言的抽象类学习10...

  • Kotlin基础(二)——面向对象

    抽象类和接口 接口 直观理解就是一种约定,Kotlin的接口与Objective-c的Proticol比较类似 不...

网友评论

      本文标题:kotlin 接口和抽象类的使用

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