Kotlin 构造函数

kotlin的构造函数

只要是面向对象的语言,就会有构造函数的概念,那啥是构造函数,其实就是你初始化类时调用的函数,在kotlin中构造函数分为主构造函数和次构造函数。

主构造函数

kotlin中主构造函数是在类名后面括号表示的,注意这里和java不一样,java中和类名相同的函数就是构造函数,且不分主构造函数和次构造函数。

class Person(name : String, sex : Int) {

}

没有参数的主构造函数

class Person() {

}

当没有参数时,也可以去掉括号,这样默认主构造函数为无参构造,但是注意如果此时定义一个下文中说的次构造函数,那么此类就没有主构造函数了,学过java的就很好理解,java中仅定义个有参构造方法,那么默认就没有了无参构造,初始化只能调用这个有参构造方法

class Person {

}

次构造函数

再来说一下kotlin中的次构造函数,次构造函数是有函数体的,次构造函数用constructor关键字表示,而且kotlin规定:所有的次构造函数必须调用主构造函数

//无参的主构造函数,这里调用主构造函数采用this关键字
class Person() {

    constructor(name : String, sex : Int) : this()

}
//有参的主构造函数,这里调用主构造函数采用this关键字
class Person(name : String, sex : Int) {

    constructor() : this("zhangsan",1)

}
//仅有次构造函数,没有主构造函数,所以不需要调用主构造函数
class Person {

    constructor(name : String, sex : Int)

}

@JvmOverloads注解的作用

看看主构造函数和次构造函数在实际当中的应用,这里以自定义View举例

//ConstraintLayout应该是没有主构造函数,所以这里调用三个构造函数中的一个
class MyCView(context: Context) : ConstraintLayout(context) {

}

上述代码只能在代码中调用,而不能在xml中调用,这里我们直接用三个参数的方法

//调用View三个参数的构造函数
class MyCView(context: Context, attrs: AttributeSet?, defStyleAttr: Int) :
    ConstraintLayout(context, attrs, defStyleAttr) {
        
}
//带有默认值的构造函数
class MyCView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) :
    ConstraintLayout(context, attrs, defStyleAttr) {

}

注意这里的@JvmOverloads注解,是因为.java文件无法调用到有默认参数值的方法,这个时候就可以用@JvmOverloads修饰之后就可以调用了

//次构造方法
class MyCView : ConstraintLayout {

    constructor(context : Context) : super(context)
    constructor(context: Context, attrs : AttributeSet?) : super(context,attrs)
    constructor(context: Context, attrs: AttributeSet?, defStyleAttr : Int) : super(context,attrs,defStyleAttr)
}

其他kotlin关键字
data :数据类,可以自动生成get/set方法
object: 单例类、引出抽象类/接口的关键字
open:修饰类,代表此类可被继承

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值