kotlin继承


abstract class Person(open val age:Int){//去掉abstract 默认class以final修饰 不能继承 可以使用open去修饰也可以继承

    abstract fun work()
}
//类想要被继承 必须使用open修饰 或者abstract
//方法想要被复写 也必须open或者abstract修饰 方法复写必须加上override关键字
//属性想要被复写 需要用open修饰
//类的构造函数里的参数 加上val 如果没有字段 则该构造方法里的参数 就可以直接作为字段使用
//如果类定义了该字段 则该参数就是构造方法的局部变量

/*
* 父类需要open才可以被继承
* 分类方法属性需要open才可以被复写
* 接口 接口方法 抽象类默认为open
* 复写父类接口成员需要override关键字
* 
* */
class Programmer( age:Int) :Person(age){
    override val age:Int = age
    override fun work() {
        println("he is coding")
    }
}
class Doctor(override val age:Int):Person(age){
    override fun work() {
        println("he is see patient")
    }
}

class Manage :Driver,Writer{
    override fun write() {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
    }

    override fun drive() {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
    }

}
//构造参数里的变量加上修饰符val 就可以成为属性
class SeniorManager(val driver:Driver,val writer: Writer):Driver,Writer{
    override fun write() {
        writer.write()
    }

    override fun drive() {
        driver.drive()
    }

}

//把Driver能力 付给driver变量 Write能力付给 writer就叫不需要复写接口方法
//by代理关键字 接口代理
class SeniorManager1(val driver:Driver,val writer: Writer):Driver by driver,Writer by writer

class CarDriver :Driver{
    override fun drive() {
        println("正在开车")
    }

}
class PPTWriter:Writer{
    override fun write() {
        println("正在写ppt")
    }

}
interface Driver{
    fun drive()
}
interface Writer{
    fun write()
}

interface B{
    fun x():Int = 0
}

interface C{
    fun x():Int = 1
}

abstract class A{
   open fun x():Int = 5
}
class D(var y:Int = 0):A(),B,C{//集成函数冲突 函数名称参数列表返回值需要一致
    override fun x(): Int {
        println("call x() int in D")
        if(y > 100){
            return y
        }else if(y > 90){
            return super<B>.x()//返回B接口的值
        }else if(y > 80){
            return super<A>.x()
        }else{
            return super<C>.x()//返回C接口的值
        }
        return 0
    }



}
fun main(vararg args:String){
    val person : Person= Programmer(10)
    person.work()
    println(person.age)
    val person2 : Person = Doctor(2)
    person2.work()
    println(person2.age)

    val driver = CarDriver()
    val writer = PPTWriter()
    val mangager = SeniorManager(driver,writer)
    mangager.write()
    mangager.drive()
    val manager1 = SeniorManager1(driver,writer)
    manager1.write()
    manager1.drive()

    println(D(110).x())
    println(D(98).x())
    println(D(81).x())
    println(D(0).x())
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值