在 Android 中,sealed
類是一種特殊的類,用于表示限定的類繼承結(jié)構(gòu)。sealed
類本身不能直接實(shí)例化,只有它的子類可以實(shí)例化。這樣可以確保所有可能的實(shí)例都是預(yù)定義的子類之一。要實(shí)現(xiàn)數(shù)據(jù)封裝,你可以將數(shù)據(jù)存儲在 sealed
類的子類中,并通過方法或?qū)傩詠碓L問這些數(shù)據(jù)。
下面是一個(gè)使用 Kotlin 編寫的示例,展示了如何使用 sealed
類實(shí)現(xiàn)數(shù)據(jù)封裝:
// 定義一個(gè) sealed 類表示形狀
sealed class Shape {
// 定義一個(gè)抽象方法計(jì)算面積
abstract fun area(): Double
}
// 定義一個(gè)矩形類,繼承自 Shape
data class Rectangle(val width: Double, val height: Double) : Shape() {
// 實(shí)現(xiàn)計(jì)算面積的方法
override fun area(): Double = width * height
}
// 定義一個(gè)圓形類,繼承自 Shape
data class Circle(val radius: Double) : Shape() {
// 實(shí)現(xiàn)計(jì)算面積的方法
override fun area(): Double = Math.PI * radius * radius
}
fun main() {
// 創(chuàng)建一個(gè)矩形實(shí)例
val rectangle = Rectangle(4.0, 5.0)
// 創(chuàng)建一個(gè)圓形實(shí)例
val circle = Circle(3.0)
// 打印矩形和圓形的面積
println("Rectangle area: ${rectangle.area()}")
println("Circle area: ${circle.area()}")
}
在這個(gè)示例中,我們定義了一個(gè) sealed
類 Shape
,它有一個(gè)抽象方法 area()
。然后我們定義了兩個(gè)子類 Rectangle
和 Circle
,分別表示矩形和圓形。這兩個(gè)子類都實(shí)現(xiàn)了 area()
方法,用于計(jì)算面積。我們還使用了 Kotlin 的 data
類來實(shí)現(xiàn)數(shù)據(jù)封裝,將寬度、高度和半徑作為屬性存儲在子類中。
這樣,我們就可以通過 Shape
類的子類來表示不同的形狀,并通過 area()
方法來計(jì)算它們的面積。由于 Shape
是一個(gè) sealed
類,我們可以確保所有可能的形狀實(shí)例都是預(yù)定義的子類之一。