美文网首页
Kotlin 类(构造参数)

Kotlin 类(构造参数)

作者: 无语_ae67 | 来源:发表于2020-10-23 13:28 被阅读0次

kotlin中类是由class声明,kotlin的类声明有三部分, 类名,类头(指定类型参数,主构造函数),类体(花括号),类头和类体都是可选

//全类声明
class NetworkConfig(name: String) {
}

//只有类名
class NetworkConfig
//有类名和类体,没有主构造参数
class NetworkConfig{
}

构造参数

kotlin可以拥有一个主构造函数和多个次构造函数,主构造函数是类头的一部分:它跟在类名(与可选的类型参数)后.

//全类声明
class NetworkConfig constructor(name: String) {
}

其中constructor是可选的,如果主构造函数没有任何注解和可见性修饰符,可以省略constructor

//全类声明
class NetworkConfig (name: String) {
}

在主构造函数中,如果没有声明构造参数的类型,就是默认的val,不可修改,如果想要可以修改可以这样写

//全类声明
class NetworkConfig (var name: String) {
}

次构造参数

在类里也可以声明由constructor的次构造函数:

class NetworkConfig {
    var agent: Int

    constructor(ag: Int) {
        agent = ag
    }
}

如果有主构造函数,那么所有的次构造函数需要直接或者间接委托给主构造函数,
委托到同一个类的另一个构造函数用 this 关键字即可:

class NetworkConfig constructor(var name: String) {
    var agent: Int = 0
    var old: Int = 0

    constructor(ag: Int, name: String) : this(name) {
        agent = ag
    }
    constructor(old: Int, ag: Int, name: String) : this(ag, name) {
        this.old = old
    }
}

this这个字段的作用在这里和java中super有一定相似,但是其实完全不同,

类的属性初始化器

init是kotlin的属性初始化关键字

class NetworkConfig constructor(var name: String) {
    var agent: Int = 0

    constructor(ag: Int, name: String) : this(name) {
        Log.e("TAG", "init2")

        agent = ag
    }
    init {
        Log.e("TAG", "init1")
        agent = 0;
    }
  
}

init中的代码的执行级别是仅次于主构造函数的,在次构造函数之前

class NetworkConfig constructor(var name: String) {
    var agent: Int = 0
    var old: Int = 0
    var old1: String = name
    var ff: Good? = null

    init {
        Log.e("TAG", "init1")
        agent = 0;
    }

    init {
        Log.e("TAG", "init2")
        agent = 0;
    }

    constructor(ag: Int, name: String) : this(name) {
        Log.e("TAG", "init3")
        agent = ag
    }

    constructor(old: Int, ag: Int, name: String) : this(ag, name) {
        Log.e("TAG", "init4")
        this.old = old
    }
}
image

从这里可以看到

  • 第一执行的是主构造参数,
  • 其次就是属性赋值,
  • 第三就是init标识的类的属性初始化器,
  • 第四就是次构造参数
    同时因为对与this关键字的执行顺序也和java中的super一样,先执行this委托的函数

构造函数的默认值

class NetworkConfig  constructor(var name: String = "") {
}

如果一个非抽象类没有声明任何(主或次)构造函数,它会有一个生成的不带参数的主构造函数。构造函数的可见性是 public。如果你不希望你的类有一个公有构造函数,你需要声明一个带有非默认可见性的空的主构造函数:

class NetworkConfig private constructor() {
}

创建类

kotlin 没有 new关键字

        val networkConfig = NetworkConfig(1.0, 5,"bch")
        val networkConfig1 = NetworkConfig()

相关文章

  • Kotlin 类(构造参数)

    类 kotlin中类是由class声明,kotlin的类声明有三部分, 类名,类头(指定类型参数,主构造函数),类...

  • kotlin类和对象

    kotlin使用class声明类 kotlin类由类名、类头、以及由花括号包围的类体构成。类头由参数和主构造函数构...

  • kotlin官方文档3.1-类和继承

    类和继承 类 在 Kotlin 中类用 class 时: 类的声明包含类名,类头(指定类型参数,主构造函数等等),...

  • Kotlin (类和继承)

    类和继承 类 在 Kotlin 中类用 class 时: 类的声明包含类名,类头(指定类型参数,主构造函数等等),...

  • Kotlin面向对象之类与继承(Classes and Inhe

    类(Classes) 在Kotlin中,类使用class关键字声明: 类的声明由类名,类头(指定其类型参数,主构造...

  • 类和继承

    类 Kotlin 中使用 关键字 Class 声明类 构造函数 Kotlin 中类可以有主构造函数 和 次构造函数...

  • Kotlin学习

    1. 构造函数 kotlin中构造函数分为主构造函数和次级构造函数主构造函数:可以直接在类名后面的括号内进行参数定...

  • 2018-08-28 Kotlin探究之旅-基础篇二

    类的声明在kotlin中用class声明类 类的声明包括类名,类头(指定参数类型,主构造函数等等),以及类主体,一...

  • Kotlin类与继承、属性

    一、类 Kotlin 中使⽤关键字 class 声明类。类声明由类名、类头(指定其类型参数、主构造函数等)、类体构...

  • Kotlin学习笔记——基础语法篇之类和对象

    类的构造 Kotlin类的写法 Kotlin类的构造函数分为主构造函数和二级构造函数 主构造函数的特点——函数名为...

网友评论

      本文标题:Kotlin 类(构造参数)

      本文链接:https://www.haomeiwen.com/subject/godvmktx.html