Kotlin编程之父类和继承父类

来源:互联网 发布:revit模型导入unity3d 编辑:程序博客网 时间:2024/06/04 21:04

Kotlin编程相关知识点介绍

  • Kotlin编程之使用Intellij IED和了解源文件(.kt)
  • Kotlin编程之类的介绍和使用
  • 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.kotlinfun 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("父类中不能被子类重新复写的方法") }}
原创粉丝点击