網(wǎng)站首頁 編程語言 正文
1.在kotlin中,默認類都是封閉的closed的。如果要讓某個類開放繼承,必須用open關(guān)鍵字修飾
類中的方法默認也是關(guān)閉的。如果需要子類復(fù)寫父類的方法,也必須用open修飾。
1)定義父類,用open將類繼承打開。用open將函數(shù)的復(fù)寫打開。
//父類必須用open修飾,才能夠被繼承
open class Person(val name:String) {
var age = 0
//父類定義的函數(shù),必須有open修飾,子類才能復(fù)寫
open fun doWork(){
println("do nothing")
}
}
2)定義子類。屬性是不需要open字段修飾的。子類默認繼承父類的屬性
class Student(name: String) : Person(name) {
override fun doWork() {
println("do homework")
}
}
fun main() {
val student = Student("HanMei")
student.age = 20
println(student.name)
println(student.age)
student.doWork()
}
2.kotlin中通過is關(guān)鍵字來檢查某個對象的類型。
val student = Student("HanMei")
println(student is Student)
println(student is Person)
println(student is Any)
Java中用 instanceof 來檢查某個對象的類型。
Student student = new Student();
System.out.println(student instanceof Student);
System.out.println(student instanceof Person);
3.在kotlin中存在一個超類Any。所有的類都他的子類。就向Java中的Object超類一樣。
Any類中也定義了和Object一樣的方法。但是在Any中都是空實現(xiàn)。真正的實現(xiàn)是由kotlin編譯器完成的。
public open class Any {
public open operator fun equals(other: Any?): Boolean
public open fun hashCode(): Int
public open fun toString(): String
}
在定義的子類中,可以復(fù)寫這些方法
class Student(name: String) : Person(name) {
override fun doWork() {
println("do homework")
}
override fun toString(): String {
return "name:$name age:$age"
}
override fun hashCode(): Int {
return super.hashCode()
}
override fun equals(other: Any?): Boolean {
return super.equals(other)
}
}
4.as是一個類型轉(zhuǎn)換操作符。可以將子類類型轉(zhuǎn)換成父類、抽象類接口。
定義一個方法,接收父類類型。
fun sayHello(p: Person) {
println("Hello," + p.name)
}
由于類的多態(tài),我們可以直接把子類類型賦值給父類類型。
也可以通過as字段轉(zhuǎn)換成父類類型,通常我們不這樣做。
val student = Student("HanMei")
sayHello(student)
sayHello((student as Person))
?
原文鏈接:https://blog.csdn.net/niuyongzhi/article/details/126612777
相關(guān)推薦
- 2023-10-17 My-form組件,基于element傳參展示用于后臺管理篩選的表單框
- 2022-08-01 C++無符號整數(shù)溢出問題解析_C 語言
- 2022-12-26 python?時間處理之月份加減問題_python
- 2022-11-02 Python+requests+unittest執(zhí)行接口自動化測試詳情_python
- 2023-01-08 Python?flask與fastapi性能測試方法介紹_python
- 2023-10-10 前端的多種克隆方式和注意事項
- 2022-12-06 Pytorch實現(xiàn)List?Tensor轉(zhuǎn)Tensor,reshape拼接等操作_python
- 2022-10-07 Android實現(xiàn)點擊圖片上傳SQLite數(shù)據(jù)庫_Android
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支