Kotlin基础 定义类与初始化、继承

本文详细介绍了Kotlin中定义类的field和计算属性,以及类的初始化,包括主构造函数、次构造函数、默认参数、初始化顺序等。此外,还探讨了延迟初始化和惰性初始化的差异,并提醒了初始化过程中的常见陷阱。在继承部分,讨论了Kotlin的继承机制、函数重载、类型测试和转换,以及智能类型转换的特点。
摘要由CSDN通过智能技术生成

一.定义类

1.field

        针对你定义的每一个属性,Kotlin都会产生一个field,一个getter,以及一个setter,field用来存储属性数据,你不能直接定义field,Kotlin会封装field,保护它里面的数据,只暴露给getter和setter使用。属性的getter方法决定你如何读取属性值,每个属性都有getter方法,setter方法决定你如何给属性赋值,所以只有可变属性才会有setter方法,尽管Kotlin会自动提供默认的getter和setter方法,但在需要控制如何读写属性数据时,你也可以自定义他们。

class Player{
    var  name="XiaoHua"
    get()=field.capitalize()
  private  set(value) {
        field=value.trim()
    }
    var  age=10
    get() = field.absoluteValue
    set(value) {
        field=value.absoluteValue
    }
  
}

2.计算属性

        计算属性是同过一个覆盖的get或set运算符来定义,这时field就不需要了。

class Player {
    var  calculateValue
        get() = (1..10).shuffled().first()

}

二.初始化

1.主构造函数

        我们在Player类的定义头中定义一个主构造函数,使用临时变量为Player的各个属性提供初始值,而在Kotlin中,为了便于识别,临时变量(包括仅引用一次的参数),通常都会以下划线开头的名字命名。

class Player (
    _name : String,
    _age : Int,
    _isNormal : Boolean
){
    var  name=_name
    get()=field.capitalize()
  private  set(value) {
        field=value.trim()
    }
    var  age=_age
    get() = field.absoluteValue
    set(value) {
        field=value.absoluteValue
    }
    var  isNormal=_isNormal;
}

2.在主构造函数里定义属性

        Kotlin允许你不使用临时变量赋值,而是直接用一个定义同时指定参数和类属性,通常,我们更喜欢用这种方式定义类属性,因为他会减少重复代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>