前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kotlin之继承覆写与覆写规则

Kotlin之继承覆写与覆写规则

作者头像
大话swift
发布2019-09-17 17:27:12
6140
发布2019-09-17 17:27:12
举报
文章被收录于专栏:大话swift

上文我们说了继承之中的构造器规则接着我们看看继承过程中属性与方法的覆写规则

方法覆写

在Kotlin的森林法则中,class是需要采用open关键字声明才可继承而内部的方法需要open修饰才可被子类覆写

代码语言:javascript
复制

open  class Shape{
    open fun draw() {
        
    }
}
class Circle: Shape() {
    override fun draw() {
        super.draw()
    }
}

上栗中我们对draw方法进行了覆写,但是当Shpe的子类的open方法不想让子类的子类再次覆写是如何呢?此时就出现了另一个关键词final

代码语言:javascript
复制
open class Rectangle : Shape() {
    final override fun draw() {
        super.draw()
    }
}
class DD : Rectangle() {
    //此时不可覆写draw
}

属性覆写

与方法类似,属性同样需要open修饰才可被子类覆写

代码语言:javascript
复制

open  class Shape{
    open val vertexCount : Int = 0
    open fun draw() {

    }
}

open class Rectangle : Shape() {
    override val vertexCount: Int
        get() = 4
    final override fun draw() {
        super.draw()
    }
}

小技巧:

open class Rectangle(override val vertexCount: Int=4) : Shape() {}

对于可覆写的属性,可以将其放置与Primary的构造函数中进行覆写和初始化

化身抽象类

在继承的过程中,对于一些open的方法我们可以前置abstract进行覆写但是不提供方法体,让子类去实现方法体来实现一个方法的抽象画

代码语言:javascript
复制

abstract class Polygon : Shape() {
    abstract override fun draw()
}
代码语言:javascript
复制

class PolygonSub : Polygon{
    override fun draw() {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
    }
}

对于继承过程中有很多细节性的东西需要我们慢慢去发现,而对于方法与属性在继承中出现的一些情况我们大体讲这么多,更多的需要大家在正式的过程中去使用体会总结啦……

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大话swift 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档