Kotlin编程之类、对象和接口

来源:互联网 发布:淘宝十大情侣装店铺名 编辑:程序博客网 时间:2024/06/10 11:28

让我们先感受下这两张图片带来的刺激感(作为single dog 的你我还能说什么,还不赶快领券去,不是打广告哦)



以冒号":"代替extends跟implement,同样遵循单继承多实现

1、接口:(重点注意注释)

(1)动物接口

/** * interface: Animals */interface Animals {    //. 无任何操作的抽象方法    fun run() {}    //. eat()跟walk()方法是一样的,Kotlin的Lambda表达式风格    fun eat() = println("from animals interface")    fun walk() {        println("animals walk")    }}

(2)生物接口

/** * interface: Biology */interface Biology {    fun eat() = println("from biology interface")}

(3)普通Dog类实现接口

/** * class(狗) :(实现)  interface(动物、生物) */class Dog : Animals, Biology{    // TODO 对比下重写eat()方法跟walk()方法    /**     * 两个接口都有eat()抽象方法     * */    override fun eat() {        /**         * 如果没有使用super<Xxxx>.xxx(),会报错         * */        //. 调用父类Animals的方法        super<Animals>.eat()//        super<Animals>.walk()        super<Animals>.run()        //. 调用父类Biology的方法        super<Biology>.eat()        //. 实现自己功能        println("implement the same method")    }    /**     * 只有Animals接口有walk()方法,那么重写walk()方法直接帮我们调用super方法     * */    override fun walk() {        super.walk()    }}

如果没有使用super去调用会报以下错误,如果你是第一次都没有用super去调用是会报以下错误的,但是回过头来再测试就不行了,有清理项目过也不行,不知道是不是Kotlin语言支持的不完善之处:


2、类:遵循单继承:open关键字修饰的可被继承,默认是final修饰的不能被继承

(1)父类

/** * open: *      (1)修饰的类可以被继承,同样称为基类.如果子类继承的类不是open修饰的类,会提示"This type is final, *          so it cannot be inherited from" *      (2)修饰的方法可以被重写,(默认是final修饰的,不能被重写) */open class Parent {    /**     * 默认是以public、final修饰的(不行你可以试试,在fun前面添加public、final会变成灰色带下波浪线的-->就是默认的啦)     * 默认是不能被重写的,需要用open关键字修饰才能被重写     * */    fun run_1() {        println("parent:run_1")    }    open fun run_2() {        println("parent:run_2")    }    open fun run_3() {        println("parent:run_3")    }}

(2)子类

/** * 通过冒号":"继承父类,并且被继承的父类后面紧跟括号"()" * 这里就无法重写run_1()的方法了,因为他是final修饰的 */open class Son : Parent() {    /**     * 同Java一样,默认会调用父类的方法,当然可以去掉super调用的方法,实现自己所要的功能     * */    override fun run_2() {        super.run_2()    }    /**     * 默认是open的,final修饰的同样是不能被重写的     * */    final override fun run_3() {        super.run_3()    }}


(3)同样可以对被继承的方法添加final关键字,并且是可被继承类(比如上面的Son类,用open修饰),那么普通类就无法重写final overide的方法了

/** * 不可被继承的GrandSon类只能重写open修饰的方法 */class GrandSon : Son(){    override fun run_2() {        super.run_2()    }}








原创粉丝点击