Kotlin基礎(二)

1.函數的定義與調用

fun add(a: Int, b: Int): Int {
    return a + b
}
fun add2(a: Int, b: Int): Int = a + b
    var i = { x: Int, y: Int -> x + y }
    println(i(3, 5))     //8
    var j: (Int, Int) -> Int = { x, y -> x + y }
    println(j(3, 5))     //8

2.函數的遞歸
//累乘

fun fact(num: Int): Int {
    return if (num == 1) {
        1
    } else {
        num * fact(num - 1)
    }
}

//累加

fun olladd(num: Int): Int {
    return if (num == 1) {
        1
    } else {
        num + olladd(num - 1)
    }
}

//尾遞歸優化 累加

tailrec fun olladd2(num: Int, result: Int): Int {
    println("第$num 次運算,result=$result")
    return if (num == 0) {
        result
    } else {
        olladd2(num - 1, result + num)
    }
}

輸出:

5次運算,result=04次運算,result=53次運算,result=92次運算,result=121次運算,result=140次運算,result=15
15

3.面向對象
// a.封裝
// b.繼承 open關鍵字允許子類繼承和重寫方法

open class Fathor {
    var xingge = "性格內向"
    open fun action() {
        println("行爲鬼怪")
    }
}

//注意子類繼承和java的區別

class Son : Fathor() {
    override fun action() {
        println("行爲正常")
    }
}

// c.多態 同種功能的不同形態

4.接口與抽象類
//Human爲抽象類 代表事物的本質
//IMan爲接口 代表事物的能力

class Man:Human(),IMan{
}

5.委託和代理(by)

interface IWashBowl{
    fun wash()
}
class BigHeadSon : IWashBowl {
    override fun wash() {
        println("我是大頭兒子,我賺了1塊錢")
    }
}
class SmallHeadFather : IWashBowl by BigHeadSon() {
    override fun wash() {
        println("我是小頭爸爸,我賺了10塊錢")
        BigHeadSon().wash()
        println("我看着兒子把碗洗好了")
    }
}
fun main(args: Array<String>) {
    val father = SmallHeadFather()
    father.wash()
}

問題:在剛纔的代碼中,小頭爸爸的代理了一個大頭兒子by BigHeadSon()之後又創建了一個BigHeadSon().wash()大頭兒子,那麼我們需要把大頭兒子定義爲單例,只創建一次

6.單例
//把class改成object

object BigHeadSon : IWashBowl {
    override fun wash() {
        println("我是大頭兒子,我賺了1塊錢")
    }
}

這個時候在小頭爸爸的類裏面只用創建一次大頭兒子,去掉()即可

class SmallHeadFather : IWashBowl by BigHeadSon {
    override fun wash() {
        println("我是小頭爸爸,我賺了10塊錢")
        BigHeadSon.wash()
        println("我看着兒子把碗洗好了")
    }
}

7.枚舉

enum class Week {
    Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
}

8.印章類 Sealed

  • 印章類更在意類型
  • 枚舉更在意數據
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章