# kotlin 类与对象
  • 类的声明:
1
2
class Bury{ // 类名为 Bury// 大括号内是类体构成 }

  • 类的成员函数:
1
2
3
class Bury() {
fun myPrint() { print("Hello world") } // 成员函数
}
  • 类的成员属性:
1
val site = Runoob() // Kotlin 中没有 new 关键字

Koltin 中的类可以有一个 主构造器,以及一个或多个次构造器,主构造器是类头部的一部分,位于类名称之后:

1
class Person constructor(firstName: String) {}

如果主构造器没有任何注解,也没有任何可见度修饰符,那么 constructor 关键字可以省略。

1
2
class Person(firstName: String) {
}

getter 和 setter 都是可选如果属性类型可以从初始化语句或者类的成员函数中推断出来,那就可以省去类型,val 不允许设置 setter 函数,因为它是只读的。

1
2
3
4
5
var allByDefault: Int? // 错误: 需要一个初始化语句, 默认实现了 getter 和 setter 方法
var initialized = 1 // 类型为 Int, 默认实现了 getter 和 setter
val simple: Int? // 类型为 Int ,默认实现 getter ,但必须在构造函数中初始化
val inferredType = 1 // 类型为 Int 类型,默认实现 getter

getter 和 setter 属性声明的完整语法:

1
2
3
4
var <propertyName>[: <PropertyType>] [= <property_initializer>]
[<getter>]
[<setter>]

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class Person {

var lastName: String = "zhang"
get() = field.toUpperCase() // 将变量赋值后转换为大写
set

var no: Int = 100
get() = field // 后端变量
set(value) {
if (value < 10) { // 如果传入的值小于 10 返回该值
field = value
} else {
field = -1 // 如果传入的值大于等于 10 返回 -1
}
}

var heiht: Float = 145.4f
private set
}

// 测试
fun main(args: Array<String>) {
var person: Person = Person()
person.lastName = "wang"
println("lastName:${person.lastName}")
person.no = 9
println("no:${person.no}")
person.no = 20
println("no:${person.no}")
}