Kotlin类与继承
admin
2023-07-28 16:20:06
0次

类

Kotlin使用class关键字声明类,类声明由类名、类头(指定其类型参数、主 构造函数等)和由大括号包围的类体组成。

类头和类体都是可选的,如果一个类没有类体大括号可省略

class NoBody


类的构造函数

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

主构造函数不能包含任何代码块,可用init块初始化代码,并且可访问主构造函数的参数

class Person constructor(firstName: String) {
    init {
        println(firstName)
    }
}

如果类头没有任何注解或者可见性修饰符,constructor关键字可省略

class Person2(firstName: String) {
    init {
        println(firstName)
    }
}

如果构造函数有注解或可见性修饰符,这个constructor关键字是必需的,并且这些修饰符在它前面

class Person3 public constructor(firstName: String) {
    init {
        println(firstName)
    }
}


次构造函数

类也可以声明次构造函数

class Animal {
    constructor(name: String) {
        println(name)
    }
}

如果一个类有主构造函数,每个次构造函数都需要委托给主构造函数,可以直接委托或者通过其它次构造函数间接委托

使用this关键字直接委托给当前类的主构造函数

class Animal2(name: String) {
    constructor(name: String, age: Int) : this(name) {
        println(name + age)
    }

    init {
        println(name)
    }
}

如果一非抽象类没有任何主或者次构造函数,它会默认生成一个不带参的主构造函数

class Animal3 {}

等同于

class Animal3(){}

将构造函数用private修饰可以防止被创建类的实例

class DontCreate private constructor() {}


创建类的实例

类定义后,需要创建实例才能使用

fun main(args: Array) {
    //实例化,Kotlin类的实例化省去了new关键字
    var person = Person("zhangsna")
    var person1 = Animal3()

    println(person)
    println(person1)

    //private修饰符修饰的构造方法不能实例化
    //var dontCreate = DontCreate()
}


继承

Kotlin和Java一样都有隐式继承,Java中一个类如果没有显示的继承一个类默认继承Object

而Kotlin中默认继承Any

class Example  //隐式继承Any

Any中只有 equals()、hashCode()和toString()三个方法。附Any类源码图

Kotlin类与继承

在Kotlin中所有的类默认为final类型,是不能够被继承的。如果该类需要被继承则必须加上open关键字否则该类编译成class后是一个final类

open class Base {
}

使用:符号实现继承,继承的父类必须初始化

class Car : Base() {
}

如果父类主构造函数有参数子类必须声明一个有参数的主构造函数初始化父类的构造函数

open class Device(name: String) {
    init {
        println(name)
    }
}

class Phone(name: String) : Device(name) {
}

如果父类没有主构造函数,那么子类每个次构造函数都必须使用super关键字调初始化父类次构造函数

open class Device2 {
    constructor(name: String) {
        println(name)
    }

    constructor(type: Int, weight: Int) {
        println("$type" + weight)
    }
}

class Computor : Device2 {
    constructor(name: String) : super(name)
    constructor(type: Int, weight: Int) : super(type, weight)
}


覆盖方法和属性

Kotlin中需要overried关键字显示的覆盖成员

open class Father {
    open var a: Int = 1
    open fun say() {
        println("father say")
    }
}

class Son : Father() {
    //必须加上overried关键字,覆盖父类成员
    override var a: Int = 2

    override fun say() {
        println("son say")
    }
}


抽象类和继承

使用abstract关键字定义抽象类

abstract class Abstract {
    //定义抽象方法时,必能有方法体
    abstract fun absFun()
}
class Sub : Abstract() {
    //子类必须实现父类的抽象方法
    override fun absFun() {
        println("absFun of sub")
    }
}


相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...