Kotlin Android 第9天,从 0 到 ML - 介面与抽象类别 / 泛型 / 扩充

前言:

   今天来看 介面与抽象类别 / 泛型 / 扩充

大纲:

Interface 介面,像是一个SOP或是流程, 大家使用後都一定要照着SOP/流程自己实作一次

var mIronPlayer = ironPlay("Kotlin Android 30天,从 0 到 ML")
mIronPlayer.showTitle()

var mWebinarSpeaker = webinarSpeaker("Kotlin Android 30天,从 0 到 ML 参赛心得")
mWebinarSpeaker.showTitle()

// Interface like SOP or flow
interface TitleInterface{
    fun showTitle()
}

class ironPlay(title:String):TitleInterface{
    var mTitle = title
    override fun showTitle() {
        //TODO("Not yet implemented")
        println("ironPlay Tilte = $mTitle")
    }

}

class webinarSpeaker(title:String):TitleInterface{
    var mTitle = title
    override fun showTitle() {
        //TODO("Not yet implemented")
        println("webinarSpeaker Tilte = $mTitle")
    }

}

https://ithelp.ithome.com.tw/upload/images/20210914/20121643oK8M3lRuap.png

abstract class(抽象类别) 不能直接被实例化,只能被类别继承。

var mWebSpeaker = webSpeaker("Kotlin Android 30天,从 0 到 ML 辛苦谈")
mWebSpeaker.showTitle()

abstract class seminarSpeakers (title:String){
    abstract fun showTitle()
}

class webSpeaker(title:String): seminarSpeakers(title) {
    var mTitle = title
    override fun showTitle() {
        //TODO("Not yet implemented")
        println("abstract Tilte = $mTitle")
    }
}

https://ithelp.ithome.com.tw/upload/images/20210914/20121643g9RJ2hP08A.png

扩充,不想用继承或是直接修改类别的话,可以使用扩充,通常用 T 来代表全部物件

var mAnySpeaker = anySpeaker(1234 )
mAnySpeaker.showTitle()

anyEventSpeaker(123456)
anyEventSpeaker("Kotlin Android 30天,从 0 到 ML 谈天说地")

println("Extensions Speaker Name = "+mWebSpeaker.getSpeakerName())

//Generic Classes
class anySpeaker<T>(title:T) {
    var mTitle = title
    fun showTitle() {
        //TODO("Not yet implemented")
        println("Generic class Tilte = $mTitle")
    }
}

//Generic fun
fun <T> anyEventSpeaker(title:T) {
        println("Generic fun Tilte = $title")
}

//扩充 Extensions
fun webSpeaker.getSpeakerName() = "Kevin"

执行结果:
https://ithelp.ithome.com.tw/upload/images/20210914/20121643I2C1y6cBZP.png

参考:

https://kotlinlang.org/docs/interfaces.html
https://kotlinlang.org/docs/generics.html#declaration-site-variance


<<:  DAY02 - 那些当年很想做但就是写不出来的Side Project...囧

>>:  Ruby on Rails RESTful 网址设计

自我笔记 - Git 日常使用

Git 基础篇 人生不能重来,但Git可以 什麽是git ? 分散式版本控制 使用 SHA1 杂凑演...

30天学会C语言: Day 5-来比大小啊!

比较/关系 运算 用来比较两个数值大小关系的运算,运算的结果是一个布林值,当两者的大小关系成立时结果...

Day21 Raid原理

Raid可以理解为是将多个硬碟组合在一起,利用虚拟储存技术,形成一个硬碟阵列,用来提升储存空间和制造...

完赛感言

完赛感言 一如开赛宣言,今年原本打算挑战多组,包含影片组要来玩 switch 的 no code 游...

Day 22 ASP.NET Core Identity(2)

昨天做的验证只针对 Identity 系统,没有包含到我们的日志,如果在未登入状态下於网址列输入ht...