Kotlin学习笔记(2)

时间:2019-11-27
本文章向大家介绍Kotlin学习笔记(2),主要包括Kotlin学习笔记(2)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

在主构造器声明属性

Kotlin 允许在主构造器上声明属性,直接在参数之前使用var 或val 即可声明属性一一使用var 声明的是读写属性,使用val 声明的是只读属性。当程序调用这种方式声明的主构造器创建对象时,传给该构造器的参数将会赋值给对象的属性。示例代码:

class Item(val code: String, val price: Double){}
fun main(args: Array<String>) {
    var im = Item("1234567", 3.7)
    println(im.code)
    println(im.price)
}

如果主构造器的所有参数都有默认值,程序能以构造参数的默认值来调用该构造器(即不需要为构造参数传入值),此时看上去就像调用无参数的构造器。例如如下程序。

//使用主构造器声明属性
class Customer(val name: String = "匿名", val addr: String = "庞口"){}
fun main(args: Array<String>) {
    var ct = Customer("周杰伦", "台湾")
    var ctm = Customer()
}

类的继承

kotlin同样是单继承,只能有一个父类.
子类继承父类的语法格式如下:

//这写法又让我想到了该死的C++,欧,我那苦不堪言的回忆
//我翻译一下,就是你想继承谁,就在类名后面加个`:父类`就完事儿了.
修饰符 class SubClass : SuperClass {
    类定义部分
}

子类的主构造器

open class BaseClass {
    var name: String
    constructor(name: String) {
        this.name = name
    }
}
//子类没有显示声明主构造器,默认有一个主构造器,因此要在声明时委托调用父类构造器.
class SubClass1: BaseClass("foo") {
} 
//子类显示声明主构造器,主构造器必须在声明继承时委托调用父类构造器.
class SubClass2(name: String): BaseClass(name) {
}

子类的次构造器

次构造器同样需要委托父类构造器
如果子类定义了主构造器,由于子类的次构造器总会委托调用子类的主构造器(直接或间接),而主构造器一定会委托调用父类构造器,因此子类的所有次构器最终也调用了父类构造器。
如果子类没有定义主构造器,则此时次构造器委托调用父类构造器可分为3 种方式。

  • 子类构造器显式使用: this (参数)显式调用本类中重载的构造器,系统将根据this (参数)调用中传入的实参列表调用本类中的另一个构造器。调用本类中的另一个构造器最终还是要调用父类构造器。
  • 子类构造器显式使用: super(参数)委托调用父类构造器,系统将根据super(参数)调用中传入的实参列表调用父类对应的构造器。
  • 子类构造器既没有: s uper(参数)调用,也没有: this (参数)调用,系统将会在执行子类构造器之前,隐式调用父类无参数的构造器。
open class Base {
    constructor(){
        println("父类的无参构造器")
    }
    constructor(name: String){
        println("父类的有参数的构造器,参数是${name}")
    }
}
class Sub: Base {
    //构造器没有显示委托,会隐式调用父类无参数构造器
    constructor() {
        println("子类的无参数构造器")
    }
    //构造器用super(name)显式调用父类的带String参数的构造器
    constructor(name: String): super(name) {
        ...
    }
    //调用另一个构造方法
    constructor(name: String, age: Int): this(name) {
        ...
    }
}

原文地址:https://www.cnblogs.com/shiguangqingqingchui/p/11943546.html