Kotlin编程之父类和继承父类

Kotlin编程相关知识点介绍:


1. 默认继承Any超类:

在Kotlin编程中,Any类是超类.

public open class Any {

    public open operator fun equals(other: Any?): Boolean

    public open fun hashCode(): Int

    /**
     * 返回对象的字符串形式.
     */
    public open fun toString(): String
}

通常我们声明一个类:

class Test{
          
   //隐式继承Any

}

有没有感觉和Java很像呀,在Java中每个类都是默认继承Object的哦。

2. 继承自定义的父类:


在一个源文件中,编写以下代码:

package com.xingen.kotlin

fun main(str: Array<String>) {

    var instance: BaseTest<String>
    instance = Test<String>("本类是")
    //父类对象调用子类对象的方法
    instance.test()

    instance.closeTest()

}

/**
 *  继承自定义的BaseTest父类
 *  覆盖属性t
 *  复写test()
 */
class Test<T> constructor(override var t: T) : BaseTest<T>(t) {
    /**
     * 复写父类中的方法
     */
    override fun test() {
        println("${t} Test子类 ")
    }
}
/**
 * open关键字:
 * 1. 修饰父类:open class BaseTest
 * 2. 主构造方法中声明的属性:open val t: T
 * 3. 修饰方法:open fun test(){ }
 * 
 * 默认情况下,Kotlin中的类,属性,方法都是被final修饰的,不允许继承或者覆盖重写。
 */
open class BaseTest<T>( open val t: T) {
    open fun test() {
        println("${t} BaseTest父类 ")
    }
   fun closeTest(){
        println("父类中不能被子类重新复写的方法")
    }
}

结果输出:

本类是 Test子类 
父类中不能被子类重新复写的方法

可知:

    默认情况下,Kotlin中的类都是final标注(可省略),这意味着不允许被继承。添加open标注才可以使父类被子类继承。 默认情况下,Kotlin中类的属性和方法都是被final标注(可省略)的,不允许被子类重写覆盖。添加open标注后的属性或者方法才能被重写覆盖,但是都必须添加override修饰。 继承父类:在子类的类头后面 加上:和父类。实际上这里有三种表现形式 : 当父类无构造函数时候,表现为:父类名() ; 当父类有主构造方法时候,表现形式为:父类名(传递的参数) 当父类中只有二级构造函数时候,表现形式为:父类名; 若是父类有主构造方法,子类在继承父类时候,父类的构造函数中的参数必需立即初始化,也就是传递参数过去。例如:class Test<T> constructor(override var t: T) : BaseTest<T>(t) 若是父类中无主构造方法,有二级构造方法,在子类继承父类的时候,在子类的二级构造方法中调用super()进行初始化。 class Test<T> : BaseTest<T>{ var t :T?=null constructor(t:T) :super(t) { this.t=t } /** * 复写父类中的方法 */ override fun test() { println("$t Test子类 ") super.test() } } /** * 自定义父类 */ open class BaseTest<T> { private var t:T?=null constructor(t:T){ this.t=t } open fun test() { println("$t BaseTest父类 ") } fun closeTest(){ println("父类中不能被子类重新复写的方法") } }
经验分享 程序员 微信小程序 职场和发展