从零开始学Kotlin-类的继承(6)

作者: SiberianDante | 来源:发表于2018-01-21 20:31 被阅读46次

从零开始学Kotlin基础篇系列文章

Kotlin中的超类Any

  • Kotlin 中所有类都继承超类 Any 类
   class demo6 //默认继承超类Any
   class demo6 : Any()
  • Any类有三个默认的函数
    override fun equals(other: Any?): Boolean {
        return super.equals(other)
    }

    override fun hashCode(): Int {
        return super.hashCode()
    }

    override fun toString(): String {
        return super.toString()
    }
  • 如果一个类想被其他类继承,使用open关键字修饰
    open class BaseClass (name:String) {//基类
    }
    class Demo6: BaseClass("SiberiaDante") {//继承基类
        }

类的构造函数的继承

  • 如果子类有主构造函数,则基类必须在主构造函数中立即初始化。
    open class Person(var name : String, var age : Int){// 基类
    }
    class Student(name : String, age : Int, var no : String, var score : Int) : Person(name, age)
  • 如果子类没有主构造函数,则必须在每一个二级构造函数中用 super 关键字初始化基类,或者在代理另一个构造函数。初始化基类时,可以调用基类的不同构造方法。
    open class Person(name: String) {
        constructor(name: String, age: Int) : this(name)
    }

    class Student : Person {
        constructor(name: String) : super(name)//调用基类主构造
        constructor(name: String, age: Int) : super(name, age)//调用基类次级构造
    }

类中方法的重写

  • 使用fun声明函数时默认为final修饰,不能被子类重写。如果基类允许子类重写该函数,则需要使用 open 关键字修饰, 子类重写方法使用 override 关键词:
    open class Person { //基类
        fun man() {//不允许子类重写的方法
            print("男人")
        }
        open fun women() {//允许子类重写方法
            print("女人")
        }
    }
    class Gender : Person() {//子类
        override fun women() {//重写父类方法
//            super.women()
        }
    }

类中属性的重写

  • 属性的重写必须具有兼容类型,重写使用 override 关键字,每一个声明的属性都可以通过初始化程序或者getter方法被重写
    open class BaseColor() {
        open val red: String = "Red"//基类可重写的属性
    }
    
    class redColor : BaseColor() {
        override val red: String="Red1"//重写基类属性
        override val red: String//重写基类属性
            get() = super.red
    }
  • 可以var属性重写val属性,但不能用val属性重写var属性。因为val属性本身定义了getter方法,重写为var属性会在衍生类中额外声明一个setter方法
    open class BaseColor() {
        open val red: String = "Red"//基类可重写的属性
    }
    
    class redColor : BaseColor() {
        override var red: String="Red1"//重写基类属性
        override var red: String//重写基类属性
            get() = super.red
    }

相关文章

  • 从零开始学Kotlin-类的继承(6)

    从零开始学Kotlin基础篇系列文章 Kotlin中的超类Any Kotlin 中所有类都继承超类 Any 类 A...

  • Kotlin-类与继承

    类 Kotlin 中使用关键字 class 声明类 类声明由类名、类头(指定其类型参数、主构造函数等)以及由花括号...

  • 从零开始学Kotlin-操作符(3)

    从零开始学Kotlin基础篇系列文章 冒号操作符 ":" 和 "::" :操作符用来定义变量、类的继承等 ::可以...

  • 从零开始学Kotlin-类和对象(5)

    定义一个类 定义一个类,使用关键字class声明,后面跟类名(不使用new) 定义类的属性 类的属性可以使用var...

  • 继承

    老版继承 call () ES6继承 extends 继承super 超类/父类

  • react组件

    es6 的class类的继承 运用es6 class继承 通过继承React.Component类来定义一个组件

  • JS中类的继承封装和多态

    子类继承父类的属性和方法(原生继承,call继承,寄生组合继承,ES6中class类继承)原生继承:让子类的原型指...

  • 面向对象类

    类与实例 类的声明 ES5 ES6 生成实例 类与继承 如何实现继承 继承的几种方式 原型链是实现继承的主要方法 ...

  • javascript之模拟类继承

    前言 ES6时代的来临,使得类继承变得如此的圆滑。但是,你有思考过ES6的类继承模式吗?如何去实现它呢? 类继承对...

  • (七)class

    类的继承 类的继承和封装 类必须有构造函数这个属性 上面那个是ES6写法,写一下注释 类的继承和封装

网友评论

    本文标题:从零开始学Kotlin-类的继承(6)

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