Kotlin细节六:类

类的定义:成员变量和 构造方法

成员变量必须有确定的值 ,可以在声明时赋值,也可以在构造方法中赋值。也可以 通过 lateinit 延迟初始化(依赖注入使用) 但是必须赋值 ,而不是像java 一样使用缺省的值。

构造方法与初始化:

  • 主构造器跟在类名后面
  • 主构造器 由于没有方法体 ,因此操作放在 init 块中
  • 次构造器必须委托给主构造器,主构造器太牛逼了。
  • 主构造器中定义的 属性最先初始化。
  • 属性的初始化优先于 init 代码块 。
  • init 代码块优先于 次构造器
class SimpleClass(var age :Int) {
    var i:Int = age.also{
        println(" 初始化顺序  ,i 属性初始化")
    }
    var name = "默认名称".also{
        println(" 初始化顺序  ,name 属性初始化")
    }

    // 次构造器
    constructor( name:String ,x:Int):this(x){
        println(" 初始化顺序  ,次构造器方法执行  ")
        this.i = x
        println("初始化顺序  ,次构造器方法执行 name = $name")
    }

    init {
        i= age*3
        println("初始化顺序 ,init 代码块 执行 i=  $i")
    }
}

fun main(){
    var simpleClass = SimpleClass("王二",30);
}

输出

 初始化顺序  ,i 属性初始化
 初始化顺序  ,name 属性初始化
初始化顺序 ,init 代码块 执行 i=  90
 初始化顺序  ,次构造器方法执行  
初始化顺序  ,次构造器方法执行 name = 王二

Kotlin 实现接口与 java 的区别

kotlin 使用 万能的: 代替了 implements 关键字
使用 override 关键字 代替 java 中的 @override 注解 。
Kotlin 的接口可以包含属性,和非抽象方法。

Kotlin open 关键字

kotlin 的 非抽象 类 和 非抽象方法 默认都是 final 属性的,如果想要开启继承和 覆写功能,需要添加open 关键字

类的属性

java 的成员变量叫 field 。Kotlin 的成员变量被叫做属性,他们的区别是 ,kotlin 会为filed 添加默认的get 和set 方法。 当然我们也可以通过 backing filed 自定义 get 和 set 。

    // 锤子手机预约 * 3功能
    var chuiziNum = 1000
    get() {
        return field
    }
    set(value){
        field = value
    }

Kotlin 内部类访问外部类

  • 访问 外部类使用: this@外部类名称 。 代替了java 的 外部类类名.this 方式
  • 访问外部类父类:super@外部类名称 。 居然不需要外部类父类的名称。。
class Outter:Top(){
    var name = "外部类"
    inner class Inner{
        var name = "内部类"
        fun printOuuter(){
            println("内部类 访问外部类"+this@Outter.name)
            println("内部类 访问外部类 的父类 ${super@Outter.topName}")
        }
    }
}
open class Top{
    var topName = " top 类"
}

Kotlin 接口的属性

接口属性 不能拥有 幕后字段 。 即不能存储状态,只能定义行为来简化代码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值