網站首頁 編程語言 正文
1.在kotlin中,默認類都是封閉的closed的。如果要讓某個類開放繼承,必須用open關鍵字修飾
類中的方法默認也是關閉的。如果需要子類復寫父類的方法,也必須用open修飾。
1)定義父類,用open將類繼承打開。用open將函數的復寫打開。
//父類必須用open修飾,才能夠被繼承
open class Person(val name:String) {
var age = 0
//父類定義的函數,必須有open修飾,子類才能復寫
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關鍵字來檢查某個對象的類型。
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中都是空實現。真正的實現是由kotlin編譯器完成的。
public open class Any {
public open operator fun equals(other: Any?): Boolean
public open fun hashCode(): Int
public open fun toString(): String
}
在定義的子類中,可以復寫這些方法
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是一個類型轉換操作符。可以將子類類型轉換成父類、抽象類接口。
定義一個方法,接收父類類型。
fun sayHello(p: Person) {
println("Hello," + p.name)
}
由于類的多態,我們可以直接把子類類型賦值給父類類型。
也可以通過as字段轉換成父類類型,通常我們不這樣做。
val student = Student("HanMei")
sayHello(student)
sayHello((student as Person))
?
原文鏈接:https://blog.csdn.net/niuyongzhi/article/details/126612777
相關推薦
- 2022-05-10 錯誤解決 刪除同名Maven Module,重新建立顯示ignored pom.xml問題
- 2022-07-22 EasyExcel導出Excel 通過 RGB 設置 表頭顏色
- 2022-09-28 Python使用captcha制作驗證碼的實現示例_python
- 2022-09-03 golang架構設計開閉原則手寫實現_Golang
- 2022-01-22 Springboot + Redis 哨兵模式
- 2022-02-25 Oracle?觸發器實現主鍵自增效果_oracle
- 2022-07-06 使用pandas兩列轉換成字典的健和值_python
- 2022-10-23 Oracle中for循環的使用方法_C#教程
- 最近更新
-
- 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同步修改后的遠程分支