美文网首页
Kotlin面向对象 (3)✔️构造函数

Kotlin面向对象 (3)✔️构造函数

作者: 狼性代码人 | 来源:发表于2019-05-29 15:47 被阅读0次
  • 主构造函数
  • 次构造函数
  • 默认构造函数

kotlin中的构造函数有主次之分,主构造函数只能有一个,此构造函数可以有多个。

一、主构造函数
  • 主构造函数在类头中或类名后面声明,使用关键字 constructor 。主构造函数本身不能包含代码,所以需要借助于初始化代码块,在 init 代码块中可以进行主构造函数需要的初始化处理。
class Rectangle constructor(w: Int, h: Int) {
    var width: Int = 0
    var height: Int = 0
    var area: Int = 0

    init {
        width = w
        height = h
        area = w * h
    }
}
  • 属性可以与主构造函数合并,这样函数体中就不需要属性声明了。
class Rectangle constructor(var width: Int, var height: Int) {
    var area: Int = 0

    init {
        area = width * height
    }
}
  • 如果所有的属性都在主构造函数中初始化,可以省略 init 代码块。如果类型没有代码 { } 也可以省略。
class User constructor(var name: String, var password: String)
  • 当主构造函数没有注解 (Annotation) 或可见性修饰符, constructor 关键字可以省略。
// 主构造函数无 annotation 和 可见修饰符
class User(var name: String, var password: String)

// 主构造函数有可见修饰符
class Grade private constructor(val a: Int, var b: User)
  • 主构造函数与普通构造函数类似,可以声明带有默认值的参数,这样一来虽然只有一个主构造函数,但调用时可以省略一些参数,类似于多个构造函数重载。
class User(var name: String = "小三", var password: String = "123")

fun main(args: Array<String>) {
    var user1 = User()
    var user2 = User("小五")
    var user3 = User("小五", "456")
    var user4 = User(password = "789")
    var user5 = User(password = "789", name = "小五")
}
二、次构造函数

由于主构造函数只能有一个,而且初始化时只有 init 代码块,有时候不够灵活,这时可以使用次构造函数。次构造函数是在函数体中声明的,使用关键字 constructor 声明,此构造函数需要调用主构造函数初始化部分属性

class Rectangle(var width: Int, var height: Int) {
    var area: Int = 0

    init {  // 无论调用主次构造函数,都会执行
        area = width * height
        Log.e("Rectangle", "执行 init 初始化代码块")
    }

    constructor(width: Int, height: Int, area: Int): this(width, height) {
        this.area = area
    }

    constructor(area: Int): this(50, 100) {
        this.area = area;
    }

    override fun toString(): String {
        return "width=$width height=$height area=$area"
    }
}
三、默认构造函数

如果一个非抽象类中根本看不到任何的构造函数,编译器会为其生成一个默认的构造函数,即: 无参数 public 的主构造函数

// 默认构造函数
class User {
    val username: String?
    val password: String?

    init {
        username = null
        password = null
    }
}

相关文章

  • Kotlin面向对象 (3)✔️构造函数

    主构造函数次构造函数默认构造函数 kotlin中的构造函数有主次之分,主构造函数只能有一个,此构造函数可以有多个。...

  • 01 面向对象

    -------------------【面向对象】------- ----《构造函数》--- 简介:所有的构造函数...

  • 第六篇:Kotlin之面向对象简单

    上篇:Kotlin之函数Lambda表达式 下篇:Kotlin之面向对象升级(一) Kotlin也支持面向对象的三...

  • RYF javascript笔记3

    4. 面向对象编程 4.1面向对象编程概述 4.1.1简介 4.1.1.1构造函数 js没有“类”,而改用构造函数...

  • 构造函数和原型对象

    javascript使用构造函数和原型对象来进行面向对象编程 构造函数 在 JavaScript 中,构造器其实就...

  • js原型prototype原型链__proto__以及必会的ne

    什么是构造函数 构造函数是典型的面向对象编程语言,js的对象语言体系,是基于构造函数和原型链的构造函数是生成对象实...

  • kotlin-第三章(类与对象)

    构造函数 访问修饰符 伴生对象 单例类 动态代理 kotlin中特有的类 09:kotlin的构造函数 kotli...

  • 2018-11-23 面向对象4 ES6

    面向对象补充: JavaScript 通过构造函数生成新对象,因此构造函数可以视为对象的模板。实例对象的属性和方法...

  • 3-javascript 构造函数

    js中面向对象编程是基于构造函数(consstructor)和原型链(prototype)的。 构造函数作为对象的...

  • 2018-11-22

    JavaScript的面向对象是基于constructor(构造函数)与prototype(原型链)的。 构造函数...

网友评论

      本文标题:Kotlin面向对象 (3)✔️构造函数

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