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