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())
}
kotlin继承
最新推荐文章于 2024-06-28 14:00:18 发布