版权声明:本文为博主原创文章,未经博主允许不得转载。 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=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
- 印章类更在意类型
- 枚举更在意数据