覆蓋機制對屬性的工作方式與對方法的工作方式相同。
在超類別上聲明的屬性於創建物件時要重新聲明必須以 override
開頭,並且它們必須具有相同的類型。
每個聲明的屬性都可以被具有初始化程序的屬性或具有 get
方法的屬性覆蓋:
open class Shape {
open val vertexCount: Int = 0
}
class Rectangle : Shape() {
override val vertexCount = 4
}
您也可以使用 var
屬性覆蓋 val
屬性,但反之則不行。
這是允許的,因為 val 屬性本質上聲明了一個 get 方法,並且將其覆蓋為 var 還會在派生類中另外聲明一個 set 方法。
請注意,您可以在主構造函數中使用 override 關鍵字作為屬性聲明的一部分:
interface Shape {
val vertexCount: Int
}
class Rectangle(override val vertexCount: Int = 4) : Shape // Always has 4 vertices
class Polygon : Shape {
override var vertexCount: Int = 0 // Can be set to any number later
}