【Kotlin】Kotlin Sealed 密封类 ( 密封类声明 | 密封类子类定义 | 密封类特点 | 代码示例 )
文章目錄
- I . 密封類概念
- II . 密封類聲明
- III. 密封類注意事項
- IV . 密封類 示例代碼
I . 密封類概念
1 . 密封類作用 : 定義一個密封類 , 該類只能有有限個指定的子類 , 不能在其它文件定義其它類型子類 ;
2 . 密封類與枚舉類 :
① 相同點(diǎn) ( 類型限制 ) : 從類型種類角度對比 , 類與枚舉類類似 , 枚舉類的值的集合是受限制的 , 不能隨意擴(kuò)展 ;
② 不同點(diǎn) ( 對象個數(shù)限制 ) : 從每個類型對象個數(shù)對比 , 枚舉類的每個類型只能存在一個實(shí)例 , 而密封類的每個類型可以創(chuàng)建無數(shù)個實(shí)例 ;
II . 密封類聲明
1 . 密封類聲明 : 在 class 前添加 sealed 修飾符 , 即可將該類聲明為密封類 ;
sealed class Student{}2 . 子類聲明 : 密封類的子類 , 必須定義在密封類的內(nèi)部 ; ( 1.1 之后的版本可以定義在同一個文件中 )
sealed class Student {class GoodStudent : Student() }為了版本兼容 , 還是定義在密封類內(nèi)部吧 ;
III. 密封類注意事項
1 . 抽象類本質(zhì) : 密封類本質(zhì)是抽象類 , 其類型不能被實(shí)例化 , 只能實(shí)例化其子類 ;
2 . 私有構(gòu)造函數(shù) : 密封類的構(gòu)造函數(shù)默認(rèn)是 private 私有的 , 其構(gòu)造函數(shù)必須是私有的 , 不允許非私有構(gòu)造函數(shù)存在 ;
3 . 密封類子類 :
① 定義在密封類內(nèi)部 ( 推薦 ) : 密封類的子類建議定義在密封類內(nèi)部 , 可以兼容所有版本 ;
② 定義在密封類所在文件 : Kotlin 1.1 以后的版本 , 可以將密封類子類定義在密封類聲明的同一個文件中 ;
4 . 密封類孫子類 : 密封類子類也可以被繼承 , 其孫子類沒有繼承限制 , 可以在其它類中繼承定義 ;
5 . when 語句 : 在 when 語句中判定 , 必須有 else 其它情況進(jìn)行兜底 , 但是判定密封類子類時 , 如果 when 中列舉了所有的密封類子類 , 此時可以不寫 else 分支 , 詳情看下面的示例代碼 ;
IV . 密封類 示例代碼
package sealedsealed class Student {/*** 注意 : 只有被 open 修飾的函數(shù)才能被 override 重寫*/open fun study(){println("學(xué)習(xí)")}/*** 子類 1*/class GoodStudent : Student(){override fun study() {println("學(xué)習(xí)很好")}fun read(){println("讀書")}}/*** 子類 2*/class NormalStudent : Student(){override fun study() {println("學(xué)習(xí)一般")}fun seat(){println("靜坐")}}/*** 子類 3*/class BadStudent : Student(){override fun study() {println("學(xué)的很渣")}fun play(){println("打游戲")}}}fun main() {// 1 . 測試密封類子類 1var goodStudent : Student.GoodStudent = Student.GoodStudent()//學(xué)習(xí)很好goodStudent.study()//讀書studentAction(goodStudent)//2 . 測試密封類子類 2var normalStudent : Student.NormalStudent = Student.NormalStudent()//學(xué)習(xí)一般normalStudent.study()//靜坐studentAction(normalStudent)//3 . 測試密封類子類 3var badStudent : Student.BadStudent = Student.BadStudent()//學(xué)的很渣badStudent.study()//打游戲studentAction(badStudent)}/*** 根據(jù)不同的類型執(zhí)行不同的方法*/ fun studentAction(student : Student) = when(student){//如果已經(jīng)覆蓋了 3 個子類 , 即所有的情況 , 此時可以不需要定義 else 語句is Student.GoodStudent -> student.read()is Student.BadStudent -> student.play()is Student.NormalStudent -> student.seat()//else -> println("其它情況") }
執(zhí)行結(jié)果 :
學(xué)習(xí)很好 讀書 學(xué)習(xí)一般 靜坐 學(xué)的很渣 打游戲總結(jié)
以上是生活随笔為你收集整理的【Kotlin】Kotlin Sealed 密封类 ( 密封类声明 | 密封类子类定义 | 密封类特点 | 代码示例 )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Kotlin】Kotlin 单例 (
- 下一篇: 【Kotlin】Kotlin enum