Kotlin 继承

简介: 一、 1.继承 父类需要open才可以被继承 父类方法、属性需要open才可以被覆写 接口、接口方法、抽象类默认都是open 覆写父类(接口)成员需要override关键字 举例: 子类D需要继承A父类,实现B...

一、
1.继承
父类需要open才可以被继承
父类方法、属性需要open才可以被覆写
接口、接口方法、抽象类默认都是open
覆写父类(接口)成员需要override关键字
举例:
子类D需要继承A父类,实现B、C接口
class D: A(),B,C
注意继承类时实际上调用了父类的构造方法
类只能单继承,接口可以多实现

2.接口代理:凡事不必事必躬亲,关键字by
class Manager(driver: Driver): Driver by driver
接口方法的实现交给代理类去实现

3.首先来看一个医生和程序源的例子
看一个故事
再看一段代码

package net.println.kotlin.chapter4

/**
 * @author:wangdong
 * @description:医生和程序员的故事
 */
/**
 * 一个类想要被继承,必须先open
 * 一个方法想要被覆写,也必须先open
 * open class Person{
 *   open fun work()
}
 */

/**定义一个人的抽象类*/
abstract class Person(open val age: Int){
    abstract fun work()
}

/**定义一个工程师的类,继承人的抽象类*/
class engineer(age: Int): Person(age){

    override val age: Int
    get() = 0
    //覆写方法一定要加override关键字
    override fun work() {
        println("我在写代码")
    }
}
/**定义一个医生的类,继承人的抽象类*/
class doctor(age: Int): Person(age){
    override fun work() {
        println("我在给病人做手术")
    }
}

fun main(args: Array<String>) {
    val engineer = engineer(23)
    engineer.work()
    println("工程师" + engineer.age)

    val doctor = doctor(45)
    doctor.work()
    println("医生" + doctor.age)
}

二、再看一资深经理的例子啦

package net.println.kotlin.chapter4

/**
 * @author:wangdong
 * @description:定义一个会开车的经理
 */

/**定义个一个经理*/
class Manager:Driver,Writer{
    override fun drive() {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
    }

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

/**定义一个资深的经理,实现两个接口*/
/**接口代理Driver by driver,不用在覆写方法,类似write的覆写也可*/
class SeniorManager(var driver: Driver,var writer: Writer): Driver by driver,Writer{

    override fun write() {
        writer.write()
    }
}

/**司机:资深经理需要找一个会开车的*/
class CarDriver: Driver{
    override fun drive() {
        println("给资深经理开车")
    }
}

/**秘书:资深经理需要找一个会作ppt的*/
class PPTWriver: Writer{
    override fun write() {
        println("给资深经理做ppt")
    }
}

/**定义一个开车的接口*/
interface Driver{

    fun drive()
}

/**会写总结报告*/
interface Writer{
    fun write()
}

fun main(args: Array<String>) {
    //Hr给资深经理招司机、秘书
    val driver = CarDriver()
    val secretary = PPTWriver()
    //给资深经理配一个司机、一个,秘书
    val seniorManager = SeniorManager(driver,secretary)
    //实际上是,资深经理让司机开车、让秘书做ppt
    seniorManager.drive()
    seniorManager.write()
}

/**运行结果是*/
/**
 * 给资深经理开车
 * 给资深经理做ppt
 */
目录
相关文章
|
Java Kotlin
Kotlin教程笔记(12) - 面向对象之继承与实现
Kotlin教程笔记(12) - 面向对象之继承与实现
|
Kotlin
Kotlin类的定义、构造函数、封装、继承和多态
Kotlin类的定义、构造函数、封装、继承和多态
208 1
|
Java Kotlin
Kotlin教程笔记(12) - 面向对象之继承与实现
Kotlin教程笔记(12) - 面向对象之继承与实现
157 4
|
Java Kotlin
Kotlin教程笔记(12) - 面向对象之继承与实现
Kotlin教程笔记(12) - 面向对象之继承与实现
210 9
|
Java Kotlin
Kotlin - 面向对象之继承与实现
Kotlin - 面向对象之继承与实现
194 4
|
Java Kotlin
Kotlin教程笔记(12) - 面向对象之继承与实现
Kotlin教程笔记(12) - 面向对象之继承与实现
|
Java Kotlin
Kotlin教程笔记(12) - 面向对象之继承与实现
Kotlin教程笔记(12) - 面向对象之继承与实现
153 3
|
Java Kotlin
Kotlin教程笔记(12) - 面向对象之继承与实现
Kotlin教程笔记(12) - 面向对象之继承与实现
154 3
|
Kotlin
Kotlin中继承、类型转换、Any超类、object关键字详解
Kotlin中继承、类型转换、Any超类、object关键字详解
459 0
|
Java Kotlin
Kotlin教程笔记(12) - 面向对象之继承与实现
Kotlin教程笔记(12) - 面向对象之继承与实现
98 0