Kotlin 类和对象

1.类

  • 构造函数声明:

一个类由一个主构造函数和多个次构造函数。 主构造函数是类头的一部分,它跟在类名后。

注意:主构造函数的参数可以在初始化块中使用。它们也可以在类体内声明的属性初始化器中使用。

    //Type1
    class Person1(var name: String, var age: Int) { //... }
    //Type2
    class Person2(name: String, age: Int) {
        var name: String = name
        var age: Int = age
    }
    //Type3
   class Person3(name: String, age: Int) {
    var name: String
    var age: Int

    init {
        //初始化
        this.name = name
        this.age = age
    }
}
  • 构造函数重载

class Person() {
    constructor()
    constructor(id: Int, name: String)
    constructor(id: Int, name: String, age: Int)
}

2.继承

Kotlin 中所有类都有一个共同的超类 Any

Kotlin 中所有类都是通过 final来修饰,也就是说不可继承。 通过关键字 open 来使其可以被继承。

通过final也可以将某个方法禁止覆盖。

如果派生类有一个主构造函数,其基类的主构造函数参数就得初始化。

class MyView(var mContext: Context) : View(mContext) {  }

如果派生类没有主构造函数,那么每个次构造函数必须使用super关键字初始化其基类型。

class MyView2 : View {
    
    constructor(context: Context?) : super(context)
    constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs)
}

3.属性

用关键字 var 声明为可变的, 使用关键字 val 声明为只读的。

    class Address {
        var name: String = ……
        var street: String = ……
        var city: String = ……
    }

get 方法获取自身,通过使用 field 关键字

var test = "abc"
    get() = "Test" + field

Getters 与 Setters

    var age: Int = 0
        get() = field + 10
        set(value) {
            age = if (value > 0) value else 0
        }

注意: 在Kotlin类中不能直接声明字段。当一个属性需要一个幕后字段时,Kotlin会自动提供。这个幕后字段可以使用field 表示符在访问器中引用:

4.接口

接口既包含抽象方法的声明, 也包含实现。

5.可见性修饰符

Kotlin中有四个修饰符: private、protected、internal、public 默认修饰符为:public

6.扩展

6.1扩展函数
fun String.println() {

    println(this)
}

注意需要写到包下,而不是类中

7.数据类

专门用来保存数据的实体类。

    data class User(val name: String, val age: Int)

8.内部类

inner 关键字表示

这样能否访问外部类成

9.对象表达式

有时候,我们需要创建一个对某个类做了轻微改动的类的对象,而不用为之显式声明新的子类。Java 用匿名内部类处理这种情况。kotlin 用对象表达式he对象声明对这个概念稍微概括了下。

10. 定义函数

    //Type1
    fun sum(a: Int, b: Int): Int {
        return a + b
    }
    //Type2  单表达式函数
    fun sum(a:Int, b:Int )=a+b

vararg 关键字表示可变参数

11.中缀表示法

标有 infix 关键字的函数可以使中缀表示法(忽略该调用的点与圆括号)调用。

中缀函数必须满足一下要求:

  • 它们必须是成员函数或者扩展函数
  • 它们必须只有一个参数
  • 其参数不得接受可变数量的参数且不能有默认值
infix fun Int.add(num2: Int): Int {  //声明方式
    return this + num2
}
var num = 1 add 2   //调用形式

12. 高阶函数

高阶函数是将函数用作参数或返回值的函数。

//声明 
fun test(num: Int, cal: (number: Int) -> Int): Int {
        return cal(num)
    }
//调用
val test = test(1, { num -> num * 3 })
Last modification:January 14th, 2020 at 07:17 pm