• 在基类中,使用fun声明函数时,此函数默认修饰符为final,不能被子类重写。如果允许子类重写,就添加open修饰它,子类重写方法使用
    override
  • open class Personage(name: String){
        constructor(name: String,age: Int):this(name){
            println("基类次级构造函数")
        }
    
        open fun study(){
            println("我毕业了")
        }
    
    }
    //如果子类没有主构造函数,则必须在每一个二级构造函数中用super关键字
    //初始化基类,或者在代理另一个构造函数。初始化基类时,可以调用基类的
    //不同构造方法
    class Student:Personage{
        constructor(name: String,age:Int,no:String,score:Int):super(name,age){
            println("学生姓名:$name")
            println("学生年龄:$age")
            println("学生学号:$no")
            println("学生分数:$score")
        }
    
        override fun study() {
    
            println("我在读大学")
        }
    }

     

  • 如果有多个相同的方法(继承或者实现自其他类,如A、B类),则必须要重写该方法,使用super范型去选择性地调用父类的实现
    fun main(args:Array<String>){
    
        val c =  C()
        c.f();
    }
    
    open class A{
        open fun f(){
            println("A")
        }
        fun A(){
            println("a")
        }
    
    
    }
    
    interface B{
        fun f(){
            println("B")
        }
    
        fun B(){
            println("b")
        }
    
    
    
    }
    
    class C:A(),B{
        override fun f() {
            super<A>.f()
            super<B>.f()
        }
    }

     

    SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
  • 属性重写
    • 属性重写使用 override 关键字,属性必须具有兼容类型,每一个声明的属性都可以通过初始化程序或者getter方法被重写
    • 你可以用一个var属性重写一个val属性,但是反过来不行。因为val属性本身定义了getter方法,重写为var属性会在衍生类中额外声明一个setter方法

      你可以在主构造函数中使用 override 关键字作为属性声明的一部分:

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄