美文网首页
Kotlin中的继承

Kotlin中的继承

作者: 王怀智 | 来源:发表于2018-12-05 18:43 被阅读15次

    Kotlin中的继承

    如何定义继承?当然是使用open关键字啦

    案例:

    open class Kotlin4_1 {
        open val str: String = "我是父类"
        open var str1: String = "我可以被重写"
        open fun parent() = "I'm a parent class"
        fun parent1(): String {
            return "It's not open"
        }
    }
    

    子类继承

    注意事项:
    使用 : 代表继承
    父类需加()

    class Kotlin4 : Kotlin4_1() 
    

    子类重写父类的变量

    • 修改父类变量值
        /*
        重写父类的val修饰变量  4种定义方式
         */
        //1.修改父类str值
       override var str:String="我是子类"
       override val str:String="我是子类"
       override val str:String
          get():String{
              var suStr=super.str
              return "$suStr 我是子类"
            }
        override var str: String = ""
            set(value) {
                field = value
            }
    
    • 不修改父类变量值
    //    override val str: String
    //        get() = super.str
    
    • 修改父类var定义变量
       /*
        重写父类的var修饰变量
         */
    //    override var str1: String
    //        get() = super.str1
    //        set(value) {}
        override var str1: String = ""
            get() = if (field.isNotEmpty()) field else super.str1
            set(value) {
                field = value
            }
    

    子类继承父类的函数

      /*
        重写父类定义函数
         */
        override fun parent(): String {
            return "I changed the parent class"
        }
    
        /**
         * 不可以重写父类非open定义函数
         * open代表的是java中final
         */
        fun parent1(i: Int): String {
            return ""
        }
    

    子类继承父类的构造函数

    /**
     * 构造函数的基类
     */
    open class Kotlin4_2 constructor(num: Int) {
        init {
            PrintlnUtils(""+num)
        }
    
        constructor(num: Int, num1: Int) : this(num) {
            PrintlnUtils(""+num)
        }
    }
    class Kotlin4_2_1(num: Int, num1: Int) :Kotlin4_2(num){
    
    }
    
    

    相关文章

      网友评论

          本文标题:Kotlin中的继承

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