【Kotlin】Kotlin 类的继承 三 ( super 关键字使用 | super@ 外部调用父类方法 | 子类选择性调用 父类 / 接口 方法 super )

文章目录

I . 子类调用父类总结

II . 子类调用父类方法 ( super )

III . 子类内部类调用父类方法 ( super@ )

IV . 子类选择调用不同的 父类 / 接口方法 ( super<> )



I . 子类调用父类总结


1 . 继承 / 实现 : 子类继承了父类 , 或实现了接口 , 接收了父类的所有操作与属性 ,



2 . 子类调用父类 : 子类可以任意调用父类的 public , protected 可见性的属性与方法 ;



3 . 子类重写父类方法 : 如果属性 或 方法被子类重写了 , 那么就需要使用 super 关键字调用父类属性或方法 ;



4 . super 关键字调用需要考虑的情况 :



① 常用情况 : 最常用的情况只使用 super 关键字进行简单调用即可 ;


② 子类内部类调用父类 : 如果想要在子类的内部调用父类的成员和方法 , 需要使用 super@子类名称 调用 ;


③ 子类调用不同父类的同名方法 : 如果子类继承的父类 / 实现的接口有相同名称的属性 / 方法 , 就需要使用 super<类/接口 名称> 的形式调用指定 父类 / 接口的方法 ;




II . 子类调用父类方法 ( super )


子类调用父类方法 : 子类中可以通过 super 调用父类的方法 , 包括普通方法 , 和属性访问的 setter 方法 ; 其中的 super 相当于父类对象的引用 ;


open class Father{
     open fun action(){ println("Father")}
}
class Son : Father() {
    override fun action() {
        //使用 super 关键字调用父类的方法
        super.action()
        println("Son")
    }
}


III . 子类内部类调用父类方法 ( super@ )


子类内部类调用父类方法 : 在子类的内部类中 , 如果想要访问父类的方法 , 可以使用 super@子类名称.父类方法() 的形式 , 调用父类的方法 ;


注意 : 这里的 super@ 后面是子类的名称 ;


open class Father{
     fun action(){ println("Father")}
}
class Son : Father() {
    inner class House{
        fun build(){
            //使用 super@子类名称 调用父类的方法
            super@Son.action()
        }
    }
}




IV . 子类选择调用不同的 父类 / 接口方法 ( super<> )


1 . 子类选择性调用父类 / 接口方法 : 子类可以继承父类 , 实现多个接口 , 如果父类与接口 , 或者不同的接口之间定义了相同名称的方法 , 那么需要使用 super<类名 / 接口名>.方法名() 选择调用指定的 类 / 接口 的指定方法 ;



2 . 代码示例 : 代码中定义了一个父类 Father , 接口 Build , 父类和接口 都定义了 action 方法 , 子类 Son 继承父类 , 实现 Build 接口 , 子类通过 super 调用父类中的成员或方法 , 子类通过 super 调用接口中的方法 ;


open class Father{
     open fun action(){ println("Father")}
}
interface Build{
    fun action(){ println("Build")}
}
class Son : Father() , Build {
    override fun action(){
        //调用父类的 action 方法
        super<Father>.action()
        //调用接口的 action 方法
        super<Build>.action()
    }
}
fun main() {
    /*
        执行结果 :
        Father
        Build
     */
    Son().action()
}


3 . 执行结果 :


Father
Build


上一篇:Java中利用final关键字inline编译优化真的有效吗?


下一篇:Java学习笔记——封装