Kotlin中類、接口相關概念與Java一樣,包括類名、屬性、方法、繼承等,如下示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
interface A { fun bar() fun foo() { // 可選方法體 } } class Child: A { override fun bar() { // todo } override fun foo() { super .foo() } } |
class
構造器
Kotlin 中的類可以有一個 主構造器, 以及一個或多個次構造器, 主構造器是類頭部的一部分, 位于類名稱之后。
1
|
class Person constructor(name: String) {...} |
如果主構造器沒有任何注解(annotation), 也沒有任何可見度修飾符, 那么 constructor 關鍵字可以省略
1
|
class Person(name: String) {...} |
主構造器中不能包含任何代碼. 初始化代碼可以放在初始化代碼段 (initializer block) 中
1
2
3
4
5
6
7
|
class Persion(name: String) { private val firstName: String = name private var age: Int init { age = 10 } } |
Kotlin 有一種簡潔語法, 可以通過主構造器來定義屬性并初始化屬性值:
1
|
class Persion(val name: String, var age: Int) {...} |
如果構造器有注解, 或者有可見度修飾符, 這時 constructor 關鍵字是必須的, 注解和修飾符要放在它之前
1
|
class Persion public @Inject constructor(val name: String) {...} |
類還可以聲明次級構造器 (secondary constructor)。如果類有主構造器, 那么次級構造器都必須委托給主構造器
1
2
3
4
5
|
class Persion(val name: String) { constructor(name: String, age: Int): this (name) { // todo } } |
類實例化
Kotlin 沒有 new 關鍵字
1
|
val persion = Persion( "jason" ) |
繼承
Kotlin的繼承概念和Java一樣,”類名: 超類“ 冒號表示繼承。
與Java的Object相對,Kotlin也有一個這樣的Any類,類默認繼承Any。
與Java的final相反,Kotlin類默認是final的,允許被繼承的類,需要加 open 修飾。
1
2
3
4
|
open class Base { open fun v() {...} fun nv() {...} // can't be override } |
方法和屬性的覆蓋
方法的覆蓋和Java類似,但是只有 open 的方法才能 override, final 類是不允許定義 open方法。
1
2
3
|
class Other: Base() { override fun v() {...} } |
可以加final禁止ovrride, final override fun v() {...}
與方法的覆蓋類似, Kotlin提供了屬性的覆蓋,例如
1
2
3
4
5
6
7
8
9
|
open class Foo { open val x: Int = 0 } class Bar(override val x: Int): Foo {...} class Bar1: Foo() { override var x: Int = 0 // override to var } |
抽象類
類本身, 或類中的部分成員, 都可以聲明為 abstract 的, 抽象類不必標識 open。
1
2
3
|
abstract class Base { abstract fun v() } |
同伴對象
Kotlin 的類沒有靜態方法, 大多數情況下, 建議使用包級函數(packagelevel function)替代, 或者使用同伴對象,
達到靜態方法效果
1
2
3
4
5
6
|
class Foo { companion object { fun v() {} } } |
interface
Kotlin 的接口和Java差不多,但是接口的屬性不一樣,Kotlin接口中的屬性是抽象的。
1
2
3
4
5
6
7
|
interface A { val x: Int } class B: A { override val x: Int = 10 } |
object
Kotlin 沒有靜態類, 可以用object實現靜態類的效果。
1
2
3
4
5
6
7
8
9
10
11
|
object B { fun foo() { // do something } } class A { fun bar() { B.foo() } } |
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
原文鏈接:http://www.jianshu.com/p/2cd616cc60a5