本文共 2247 字,大约阅读时间需要 7 分钟。
一、
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) { 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) { //Hr给资深经理招司机、秘书 val driver = CarDriver() val secretary = PPTWriver() //给资深经理配一个司机、一个,秘书 val seniorManager = SeniorManager(driver,secretary) //实际上是,资深经理让司机开车、让秘书做ppt seniorManager.drive() seniorManager.write()}/**运行结果是*//** * 给资深经理开车 * 给资深经理做ppt */