網站首頁 編程語言 正文
這篇文檔中,我們將解釋如何以及為什么將 open
關鍵字與類名、函數名和變量名一起使用。
我們都知道繼承(Inheritance)是每一種面向對象編程語言的支柱。 它是一個類的屬性和特征由另一個類派生或使用的過程。 簡單來說,如果一個名為 ClassA 的類有一些變量和函數,而另一個名為 ClassB 的類繼承了 ClassA,那么 ClassB 將使用 ClassA 的變量和方法。 在這里,ClassA 稱為父類,ClassB 稱為子類。 繼承使可重用性成為可能。
1 Kotlin open 在類名中的使用
在 Kotlin 中,要從另一個類繼承一個類,可以使用以下語法:
//Base Class open class MindOrks { } //Derived class class AndroidPro : MindOrks(){ }
在上面的示例中,我們從 AndroidPro
類繼承 MindOrks
類。 因此,MindOrks
是父類,AndroidPro
是子類。
在 Kotlin 中,默認情況下所有類都是 final 的,即默認情況下它們不能被繼承。這與我們在 Java 中學到的相反。在 Java 中,我們必須明確地使類設置為 final 才行。
所以,要使一個類可以被其他類繼承,我們在這里必須用 open 關鍵字標記它,否則會報錯:type is final so can’t be inherited
。
2 Kotlin open 在函數名中的使用
就像類一樣,Kotlin 中的所有函數在本質上默認也都是 final 的,也就是說,當函數本質上是 final 時,我們不能 override 一個函數。
函數的 override 是在子類中重新定義基類函數的過程。所以說,在父類的對應函數前需要加關鍵字 open
,與此同時,在子類中的這個函數前,我們必須使用 override 修飾符。
open class MindOrks { //use open keyword to allow child class to override it open fun courseName(){ println("Course Name") } } class AndroidPro : MindOrks(){ //use the override keyword to override the function override fun courseName() { println("Android for Professionals") } }
這個示例中,MindOrks
父類有一個名為 courseName()
的函數,并且此 MindOrks
類由 AndroidPro
類繼承。 在 AndroidPro
類中,我們重寫了 courseName()
方法并重新定義了函數的主體。
3 Kotlin open 在變量名中的使用
就像類和函數一樣,Kotlin 中的變量在本質上默認是 final 的。 因此,要在子類中 override 它,我們需要在父類中將變量設置為 open
:
open class MindOrks { //use open keyword to allow child class to override it open val courseId: Int = 0 //use open keyword to allow child class to override it open fun courseName(){ println("Course Name") } } class AndroidPro : MindOrks(){ //use the override keyword to override the variable override val courseId: Int = 1 //use the override keyword to override the function override fun courseName() { println("Android for Professionals") } }
在上面的示例中,MindOrks
類中的 courseId
設置為 0,但在子類中,即 AndroidPro
類中,該值更改為 1。
一個簡單的總結:在 Kotlin 中,類、函數和變量在本質上都默認是 final 的,即它們不能從任何其他類繼承。 因此,為了使其可從其他類繼承,我們使用帶有類、函數和變量名的 open 關鍵字。
原文鏈接:https://blog.csdn.net/zyctimes/article/details/127814613
相關推薦
- 2022-07-26 圖解Elasticsearch 獲取兩個索引數據不同之處的四種方案
- 2022-07-06 python繪制子圖技巧之plt.subplot、plt.subplots及坐標軸修改_python
- 2023-04-20 使用replaceAll()方法實現數字千分位逗號分隔
- 2022-04-11 用python的哈希函數對密碼加密_python
- 2021-12-15 git_stats?web代碼圖形統計工具詳解_其它綜合
- 2022-05-21 云原生自動化應用于docker倉庫私有憑據secret創建_docker
- 2022-01-01 element對穿梭框對接口返回的數據其他字段進行校驗多個校驗
- 2022-04-20 為WPF框架Prism注冊Nlog日志服務_實用技巧
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支