1. 程式人生 > >Kotlin入門

Kotlin入門

實現 cti lai art rms fin ali maven C#

轉載自:https://www.cnblogs.com/jaymo/articles/6924144.html

創建類的實例

要創建一個類的實例,我們就像普通函數一樣調用構造函數:

1 2 3 val invoice = Invoice() val customer = Customer("Joe Smith")

註意 Kotlin 並沒有 new 關鍵字。

繼承

在 Kotlin 中所有類都有一個共同的超類 Any,這對於沒有超類型聲明的類是默認超類

1 class Example
// 從 Any 隱式繼承

Any 不是 java.lang.Object;尤其是,它除了 equals()hashCode()toString()外沒有任何成員。

要聲明一個顯式的超類型,我們把類型放到類頭的冒號之後:

1 2 3 open class Base(p: Int) class Derived(p: Int) : Base(p)

  

類上的 open 標註與 Java 中 final 相反,它允許其他類 從這個類繼承。默認情況下,在 Kotlin 中所有的類都是 final, 對應於 Effective Java書中的 第 17 條:要麽為繼承而設計,並提供文檔說明,要麽就禁止繼承。

覆蓋方法

我們之前提到過,Kotlin 力求清晰顯式。與 Java 不同,Kotlin 需要顯式 標註可覆蓋的成員(我們稱之為開放)和覆蓋後的成員:

 

1 2 3 4 5 6 7 open class Base { open fun v() {} fun nv() {} } class Derived() : Base() { override fun v() {} }

  

標記為 override 的成員本身是開放的,也就是說,它可以在子類中覆蓋。如果你想禁止再次覆蓋,使用 final 關鍵字:

1 2 3 open class AnotherDerived() : Base() { final override fun v() {} }

  

覆蓋屬性

屬性覆蓋與方法覆蓋類似;在超類中聲明然後在派生類中重新聲明的屬性必須以 override 開頭,並且它們必須具有兼容的類型。每個聲明的屬性可以由具有初始化器的屬性或者具有 getter 方法的屬性覆蓋。

1 2 3 4 5 6 7 open class Foo { open val x: Int get { …… } } class Bar1 : Foo() { override val x: Int = …… }

  

你也可以用一個 var 屬性覆蓋一個 val 屬性,但反之則不行。這是允許的,因為一個 val 屬性本質上聲明了一個 getter 方法,而將其覆蓋為 var 只是在子類中額外聲明一個 setter 方法。

伴生對象

與 Java 或 C# 不同,在 Kotlin 中類沒有靜態方法。在大多數情況下,它建議簡單地使用 包級函數。

如果你需要寫一個可以無需用一個類的實例來調用、但需要訪問類內部的 函數(例如,工廠方法),你可以把它寫成該類內對象聲明 中的一員。

更具體地講,如果在你的類內聲明了一個伴生對象, 你就可以使用像在 Java/C# 中調用靜態方法相同的語法來調用其成員,只使用類名 作為限定符。

屬性和字段

聲明一個屬性的完整語法是

1 2 3 var <propertyName>[: <PropertyType>] [= <property_initializer>] [<getter>] [<setter>]

  

幕後字段

接口

Kotlin 的接口與 Java 8 類似,既包含抽象方法的聲明,也包含 實現。與抽象類不同的是,接口無法保存狀態。它可以有 屬性但必須聲明為抽象或提供訪問器實現。

1 2 3 4 5 6 interface MyInterface { fun bar() fun foo() { // 可選的方法體 } }

  

可見性修飾符

類、對象、接口、構造函數、方法、屬性和它們的 setter 都可以有_可見性修飾符_。 (getter 總是與屬性有著相同的可見性。) 在 Kotlin 中有這四個可見性修飾符:privateprotectedinternalpublic。 如果沒有顯式指定修飾符的話,默認可見性是 public

  • 如果你不指定任何可見性修飾符,默認為 public,這意味著你的聲明 將隨處可見;
  • 如果你聲明為 private,它只會在聲明它的文件內可見;
  • 如果你聲明為 internal,它會在相同模塊內隨處可見;
  • protected 不適用於頂層聲明。

註意 對於Java用戶:Kotlin 中外部類不能訪問內部類的 private 成員。

模塊

可見性修飾符 internal 意味著該成員只在相同模塊內可見。更具體地說, 一個模塊是編譯在一起的一套 Kotlin 文件:

  • 一個 IntelliJ IDEA 模塊;
  • 一個 Maven 或者 Gradle 項目;
  • 一次 <kotlinc> Ant 任務執行所編譯的一套文件。

Kotlin入門