Kotlin基礎(二)
阿新 • • 發佈:2018-11-30
1.函式的定義與呼叫
2.函式的遞迴
3.面向物件
4.介面與抽象類
5.委託和代理
6.單例
7.列舉
8.印章類
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=0
第4次運算,result=5
第3次運算,result=9
第2次運算,result=12
第1次運算,result=14
第0次運算,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
- 印章類更在意型別
- 列舉更在意資料