日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Kotlin】Kotlin Sealed 密封类 ( 密封类声明 | 密封类子类定义 | 密封类特点 | 代码示例 )

發(fā)布時間:2025/6/17 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Kotlin】Kotlin Sealed 密封类 ( 密封类声明 | 密封类子类定义 | 密封类特点 | 代码示例 ) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

        • 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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。