Kotlin面向对象相关
1.field
针对定义的每一个属性,Kotlin都会产生一个field,一个getter以及一个setter,field用于存储属性数据,你不能直接定义field,Kotlin会封装field,保护它里面的数据,只暴露给getter和setter使用,属性的getter方法决定你如何读取属性值,每个属性都有getter方法,setter方法决定你如何给属性赋值,所以只有可变属性才会有setter方法,尽管Kotlin会自动提供默认的getter和setter方法,但在需要控制如何读写属性数据时,你也可以自定义他们。
例:定义一个Player类
1 | class Player { |
自定义如何读写属性数据
例:读的时候将首字母大写,写的时候去掉空格
1 | class Player { |
1.1计算属性
计算属性是通过一个覆盖的get或set运算符来定义,这时field就不需要了
rolledValue的值跟field没有关系
1 | class Player { |
1.2防范竞态条件
如果一个类属性既可空又可变,那么引用它之前你必须保证它非空,一个办法是用also标准函数
1 | class Player { |
2.初始化
2.1主构造函数
我们在Player类的定义头中定义一个主构造函数,使用临时变量为Player的各个属性提供初始值,在Kotlin中,为便于识别,临时变量(包括仅引用一次的参数),通常都会以下划线开头的名字命名。
1 | class Player(_name: String,_age: Int,_isNormal: Boolean) { |
直接在构造方法里定义属性
1 | class Player(_name: String,var age: Int,var isNormal: Boolean) { |
2.2次构造函数
有主就有次,对应主构造函数的是次构造函数,我们可以定义多个次构造函数来配置不同的参数组合。
1 | class Player(_name: String,var age: Int,var isNormal: Boolean) { |
使用次构造函数,定义初始化代码逻辑。
1 | class Player(_name: String,var age: Int,var isNormal: Boolean) { |
2.3默认参数
定义构造函数时,可以给构造函数参数指定默认值,如果用户调用时不提供值参,就使用这个默认值。
1 | class Player(_name: String,var age: Int = 20,var isNormal: Boolean) { |
2.4初始化块
初始化块可以设置变量或值,以及执行有效性检查,如检查传给某构造函数的值是否有效,初始化块代码会在构造类实例时执行。
1 | class Player(_name: String,var age: Int = 20,var isNormal: Boolean) { |
2.5初始化顺序
主构造函数里声明的属性
类级别的属性赋值
init初始化块里的属性赋值和函数调用
次构造函数里的属性赋值和函数调用
1 | //①首先初始化主构造函数 |