对于每个属性,kotlin会自动生成一个的field:代表属性的值,一个getter方法,一个setter方法。我们操作属性时,实际调用的是get和set方法,因为kotlin变量的不可空性,对于非空变量,我们在赋值时,系统要对赋值的值进行是否为null判断
我们可以自定义get和set方法,需要写在对应变量的下面
get和set也可以直接赋值成表达式
和可空变量一样,如果属性可空,那么使用它的时候必须保证它非空
和Java实例化有很多不同,kotlin的初始化更加灵活
在类的定义头中定义主构造函数,使用临时变量为属性赋值
kotlin允许直接用一个定义,同时指定类属性和参数
使用constructor来创建次构造函数
定义构造函数时,可以指定参数值,如果用户不提供,则使用默认值
结果:
张三
10
初始化块,相当于默认提供了一个初始化方法,可以设置变量或值,以及执行有效性检查,初始化块在实例化时执行
kotlin代码和反编译成Java代码对比:
使用关键字lateinit来表示使用时,才初始化参数,构造时并不会初始化占用内存
可以执行isInitialized检查是否初始化
结果:
false
惰性初始化也可以实现延迟初始化
测试:
结果:
start 1629701476608
init 1629701479710
end 1629701479710
kotlin默认每个类都是封闭的,如果要开放继承,使用关键字"open"
父类函数也需要"open"关键字修饰才能重载,并且重载的函数要加上"override"关键字
结果:
female working
Java中使用:”instanceof“ ,kotlin中使用:”is“
Java强转类型使用(类名),kotlin使用"as"关键字
如果类型转换过,下次使用时不再需要转换
kotlin中所有类的超类为Any,编译时才会实现它的基本方法,以便根据不同平台实现跨平台