第十三节 继承、抽象类、接口

1、open关键字
定义连个类Father、Son
Son继承Father


image.png

看下java代码


image.png

Father类是final的,所以不能继承,需要加上open关键字修饰,成员变量和成员方法都一样

fun main(args: Array<String>) {
    var son=Son()
    son.horbe()

}


open class Father{
    open var name="张三"
    open var age=20
    open fun horbe()
    {
        println("父亲习惯抽烟")
    }
}
class Son:Father(){
    override var name="张小三"
    override var age=10
    override fun horbe() {
        println("孩子喜欢看书")
    }

}

输出:


image.png

2、抽象类
抽象类用abstract表示,抽象类可以没有抽象方法和抽象字段,抽象类不需要使用open关键字


fun main(args: Array<String>) {
    var son=Son()
    println(son.name)
    println(son.age)
    son.horbe()

}


abstract class Father{
    abstract var name:String
    var age=20
    abstract fun horbe()
}
class Son:Father(){
    override var name="张小三"
    override fun horbe() {
        println("孩子喜欢看书")
    }
}

输出:


image.png

3、接口


fun main(args: Array<String>) {
    var son=Son()
    println(son.name)
    println(son.age)
    son.horbe()
    son.ride()
    son.drive()

}


abstract class Father{
    abstract var name:String
    var age=20
    abstract fun horbe()
}

class Son:Father(),RideBike,DriveCar{
    override fun ride() {
        println("骑自行车")
    }

    override fun drive() {
        println("开车")
    }

    override var name="张小三"
    override fun horbe() {
        println("孩子喜欢看书")
    }
}

interface RideBike{
    fun ride()
}

interface DriveCar{
    fun drive()
}

输出:


image.png

4、接口细节
kotlin接口中的字段不能实现,只能定义,但在java中是可以的


image.png

kotlin接口中的方法是可以实现的,但是java中是不可以的

interface DriveCar{
    fun drive(){
        println("开车")
    }
    var str:String
}

5、is关键字
类似于java中instanceof关键字


fun main(args: Array<String>) {
    val shepHerdDog:Dog = ShepHerdDog()
    //判断完之后已将将shepHerdDog类型由Dog类型转换为ShepHerdDog类型
    if(shepHerdDog is ShepHerdDog){
        shepHerdDog.herdShep()
    }
}

//Dog狗
abstract class Dog
//牧羊犬
class ShepHerdDog:Dog(){
    //功能
    fun herdShep(){
        println("牧羊犬放羊")
    }
}
//中华田园犬
class RuralDog:Dog(){
    //功能
    fun watchDoor(){
        println("中华田园犬看家")
    }
}

输出:


image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容