上文我们说了继承之中的构造器规则接着我们看看继承过程中属性与方法的覆写规则
方法覆写
在Kotlin的森林法则中,class是需要采用open关键字声明才可继承而内部的方法需要open修饰才可被子类覆写
open class Shape{
open fun draw() {
}
}
class Circle: Shape() {
override fun draw() {
super.draw()
}
}
上栗中我们对draw方法进行了覆写,但是当Shpe的子类的open方法不想让子类的子类再次覆写是如何呢?此时就出现了另一个关键词final
open class Rectangle : Shape() {
final override fun draw() {
super.draw()
}
}
class DD : Rectangle() {
//此时不可覆写draw
}
属性覆写
与方法类似,属性同样需要open修饰才可被子类覆写
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进行覆写但是不提供方法体,让子类去实现方法体来实现一个方法的抽象画
abstract class Polygon : Shape() {
abstract override fun draw()
}
class PolygonSub : Polygon{
override fun draw() {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
}
对于继承过程中有很多细节性的东西需要我们慢慢去发现,而对于方法与属性在继承中出现的一些情况我们大体讲这么多,更多的需要大家在正式的过程中去使用体会总结啦……