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 })
One comment