Kotlin學習筆記-類和介面
一. class
- 宣告
class Person {
}
-
修飾符
- classModifier
abstract //抽象類標示
final //標示類不可繼承,預設屬性
enum //標示類為列舉
open //類可繼承,類預設是final的
annotation //註解類
- accessModifier
private //僅在同一個檔案中可見
protected //同一個檔案中或子類可見
public //所有呼叫的地方都可見
internal //同一個模組中可見
- 屬性
class Person {
var name: String = "tom"
set(value) {
field = value
}
get() = field.toUpperCase()
var age: Int = 0
}
-
構造方法
Kotlin 中類可以有一個主構造方法以及多個二級構造方法。主構造方法是類頭的一部分
- 主構造方法
class Person constructor (name: String) {
init {
}
}
和上面的區別在於 上面的name只是作為引數傳遞,而下面的方式中name直接成為類的成員屬性
class Person constructor(val name: String) {
init {
}
}
主構造方法的初始化程式碼可以放到init程式碼塊中,如果沒有註解或修飾符則 constructor 可以省略
- 二級構造方法
class Person {
constructor(name: String) {
}
}
- 如果類有主構造方法, 那麼每個二級構造方法都必須委託給主構造方法, 要麼直接委託, 要麼通過其他二級構造方法間接委託. 委託到同一個類的另一個構造方法時, 使用 this 關鍵字實現
class Person(val name: String) {
constructor(name: String, age: Int) : this(name) {
}
}
- 例項化
Kotlin中沒有new關鍵字
val p = Person("tom")
- 抽象類
abstract class Parent {
abstract fun foo()
}
class Children : Parent() {
override fun foo() {
}
}
- 內部類
class Outer {
private val bar: Int = 1
inner class Inner {
fun foo() {
println(bar)
}
}
}
內部類使用inner修飾,持有外部類的引用,可以訪問外部類的屬性和方法
- 巢狀類
class Outer {
val bar: Int = 1
class Nested {
}
}
巢狀類和內部類的區別在於巢狀類沒有外部類的引用
-
封閉類
封閉類是列舉類(enum class)的一種擴充套件: 列舉類的值也是有限的, 但每一個列舉值常數都只存在唯一的一個例項, 封閉類則不同, 它允許的子類型別是有限的, 但子類可以有多個例項, 每個例項都可以包含它自己的狀態資料
sealed class Expr {
class Const(val number: Double) : Expr()
class Sum(val e1: Expr, val e2: Expr) : Expr()
object NotANumber : Expr()
}
-
資料類
只儲存資料的類,使用data 修飾,類似java中的javabean
data class Person(var name: String, var age: Int, var gender: Int)
- 單例
object Singleton {
fun foo() {
}
}
fun main(args: Array<String>) {
Singleton.foo()
}
二.interface
- 定義
interface MyInterface {
fun foo()
//預設實現
fun bar() {
println("hi")
}
}
- 實現
class MyClass :MyInterface{
override fun foo() {
}
override fun bar() {
super.bar()
}
}
- 介面的屬性
interface MyInterface {
var name: String
}
//實現方式一
class MyClass(override var name: String) : MyInterface {
}
//實現方式二
class MyClass : MyInterface {
override var name: String
get() = name
set(value) {}
}
-
重寫
實現多個介面時,可能會遇到同一方法繼承多個實現的問題
interface A {
fun foo() {
println("A foo")
}
fun bar() {
println("A bar")
}
}
interface B {
fun foo() {
println("B foo")
}
fun bar() {
println("B bar")
}
}
class C : A, B {
override fun foo() {
super<A>.foo() //必須指定呼叫哪個介面的方法
}
override fun bar() {
super<B>.bar()
}
}
相關文章
- Kotlin學習筆記(5)- 類Kotlin筆記
- Java學習筆記之介面和抽象類Java筆記抽象
- Kotlin學習筆記 其他Kotlin筆記
- Kotlin for Java Developers 學習筆記KotlinJavaDeveloper筆記
- Kotlin 入門學習筆記Kotlin筆記
- Java學習筆記之類和物件Java筆記物件
- Go 介面 學習筆記Go筆記
- 【Go學習筆記13】介面和實現Go筆記
- Kotlin學習快速入門(3)——類 繼承 介面Kotlin繼承
- 轉向Kotlin——類和介面Kotlin
- Scala 學習筆記(2)之類和物件筆記物件
- GObject學習筆記(一)類和例項GoObject筆記
- TS學習筆記(二):介面筆記
- Kotlin學習筆記-基礎語法Kotlin筆記
- Kotlin教程(三)類、物件和介面Kotlin物件
- TS學習筆記(三):類筆記
- angular學習筆記(九)-css類和樣式2Angular筆記CSS
- angular學習筆記(九)-css類和樣式1Angular筆記CSS
- angular學習筆記(九)-css類和樣式3Angular筆記CSS
- C++學習筆記-----類和建構函式C++筆記函式
- 抽象類特點 學習筆記抽象筆記
- java學習筆記(包裝類)Java筆記
- 類的基礎學習筆記筆記
- 小白的學習筆記1:介面和多型,以及例子筆記多型
- Kotlin學習筆記(五十八)正規表示式Kotlin筆記
- OCI介面學習筆記--基本理解(二)筆記
- 工作學習筆記(七)Java的介面筆記Java
- AS 學習筆記 for in 和 for each in筆記
- JMockit學習之mock介面和抽象類Mock抽象
- Kotlin知識歸納(四) —— 介面和類Kotlin
- Java 入坑 Kotlin 必看 —— 類、物件和介面JavaKotlin物件
- Kotlin 知識梳理(3) 類、物件和介面Kotlin物件
- 我的 golang 學習筆記系列三:結構體和介面Golang筆記結構體
- Solidity語言學習筆記————35、抽象合約和介面Solid筆記抽象
- 類歐幾里得演算法學習筆記演算法筆記
- TypeScript學習筆記之五類(Class)TypeScript筆記
- iOS學習筆記43 Swift(三)類iOS筆記Swift
- git 和 vim 學習筆記Git筆記