Kotlin基础(二)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_31743309/article/details/84573404

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=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

  • 印章类更在意类型
  • 枚举更在意数据

猜你喜欢

转载自blog.csdn.net/qq_31743309/article/details/84573404