Kotlin - 類和物件



Kotlin 支援函數語言程式設計和麵向物件程式設計。談到 Kotlin 的函式式特性,我們有函式、高階函式和 lambda 等概念,這些概念將 Kotlin 表示為一種函式式語言。

Kotlin 還支援面向物件程式設計 (OOP),並提供抽象、封裝、繼承等特性。本教程將以簡單的步驟教你所有 Kotlin OOP 特性。

面向物件程式設計 (OOP) 允許我們使用物件來解決複雜問題。

Kotlin 類

類是物件的藍圖,它定義了一個模板,用於建立所需的物件。

類是任何面向物件程式語言的主要構建塊。Kotlin 類使用 **class** 關鍵字定義。以下是建立 Kotlin 類的語法:

Kotlin 類宣告類似於 Java 程式設計,它由一個 **類頭** 和一個用大括號括起來的 **類體** 組成。
class ClassName { // Class Header

   //
   // Variables or data members
   // Member functions or Methods
   //
   ...
   ...
}

預設情況下,Kotlin 類是 **public** 的,我們可以使用不同的修飾符來控制類成員的可見性,我們將在 **可見性修飾符** 中學習。

Kotlin 物件

物件是從 Kotlin 類建立的,它們共享類中定義的公共屬性和行為,分別以資料成員(屬性)和成員函式(行為)的形式。

宣告類物件的語法是:

var varName = ClassName()

我們可以使用 **.**(點)運算子訪問類的屬性和方法,如下所示:

var varName = ClassName()

varName.property = <Value>
varName.functionName()

示例

以下是一個示例,我們將建立一個 Kotlin 類及其物件,透過該物件我們將訪問該類的不同資料成員。

class myClass {
   // Property (data member)
   private var name: String = "Tutorialspoint.com"

   // Member function
   fun printMe() {
      print("The best Learning website - " + name)
   }
}
fun main(args: Array<String>) {
   val obj = myClass() // Create object obj of myClass class
   obj.printMe() // Call a member function using object
}

上面的程式碼將在瀏覽器中產生以下輸出,我們在這裡使用它自己的物件 **obj** 呼叫 **myClass** 的 **printMe()** 方法。

The best Learning website - Tutorialspoint.com

Kotlin 巢狀類

根據定義,當一個類在另一個類中建立時,它被稱為 **巢狀類**。

Kotlin 巢狀類預設是靜態的,因此,無需建立該類的任何物件即可透過 **.** 點運算子訪問它。同時,我們不能在巢狀類中訪問外部類的成員。

以下是建立巢狀類的簡單語法:

class OuterClass{
   // Members of Outer Class
   class NestedClass{
      // Members of Nested Class
   }
}

現在我們可以像下面這樣建立巢狀類的物件:

val object = OuterClass.NestedClass()

示例

以下示例顯示了 Kotlin 如何解釋巢狀類。

fun main(args: Array<String>) {
   val obj = Outer.Nested()

   print(obj.foo())
}
class Outer {
   class Nested {
      fun foo() = "Welcome to The TutorialsPoint.com"
   }
}

執行上述 Kotlin 程式時,將生成以下輸出:

Welcome to The TutorialsPoint.com

Kotlin 內部類

當巢狀類用關鍵字 **inner** 標記時,它將被稱為 **內部類**。內部類可以被外部類的成員訪問。

與巢狀類不同,內部類可以訪問外部類的成員。我們不能直接建立內部類的物件,但可以使用外部類物件建立。

以下是建立內部類的簡單語法:

class OuterClass{
   // Members of Outer Class
   class inner InnerClass{
      // Members of Inner Class
   }
}

現在我們可以像下面這樣建立內部類的物件:

val outerObj = OuterClass()
val innerObj = outerObj.InnerClass()

示例

以下示例顯示了 Kotlin 如何解釋內部類。

fun main(args: Array<String>) {
   val obj = Outer().Inner()

   print(obj.foo())
}
class Outer {
   private val welcomeMessage: String = "Welcome to the TutorialsPoint.com"
   inner class Inner {
      fun foo() = welcomeMessage
   }
}

執行上述 Kotlin 程式時,將生成以下輸出:

Welcome to The TutorialsPoint.com

匿名內部類

匿名內部類是一個非常好的概念,它使程式設計師的生活非常輕鬆。每當我們實現一個介面時,匿名內部塊的概念就會出現。在執行時使用物件引用建立介面的物件的概念稱為匿名類。

示例

以下示例顯示瞭如何建立介面以及如何使用匿名內部類機制建立該介面的物件。

fun main(args: Array<String>) {
   var programmer :Human = object:Human { // Anonymous class
      override fun think() { // overriding the think method
         print("I am an example of Anonymous Inner Class ")
      }
   }
   programmer.think()
}
interface Human {
   fun think()
}

執行上述 Kotlin 程式時,將生成以下輸出:

I am an example of Anonymous Inner Class

Kotlin 類型別名

Kotlin 類型別名意味著為現有型別提供替代名稱的方法。類型別名提供了一種更簡潔的方式來編寫更易讀的程式碼。

考慮以下返回使用者資訊(名字、姓氏和年齡)的函式:

fun userInfo():Triple<String, String, Int>{
   return Triple("Zara","Ali",21)
}

現在我們可以為給定的 **Triple** 建立一個類型別名,如下所示:

typealias User = Triple<String, String, Int>

最後,上面的函式可以寫成如下所示,它看起來比上面的程式碼更簡潔:

fun userInfo():User{
   return Triple("Zara","Ali",21)
}

示例

以下是一個完整的可執行示例,演示了在 Kotlin 中使用類型別名。

typealias User = Triple<String, String, Int>

fun main() {
    val obj = userInfo()

    print(obj)
}

fun userInfo():User{
   return Triple("Zara","Ali",21)
}

執行上述 Kotlin 程式時,將生成以下輸出:

(Zara, Ali, 21)

測驗時間 (面試與考試準備)

Q 1 - 預設情況下,Kotlin 類是 public 的

A - 是

B - 否

答案:A

解釋

是的,預設情況下所有 Kotlin 類都是 public 的。

Q 2 - Kotlin 允許在巢狀類中訪問外部類的成員。

A - 正確

B - 錯誤

答案:B

解釋

不允許在巢狀類中訪問外部類的成員。

Q 3 - Kotlin 允許在內部類中訪問外部類的成員。

A - 正確

B - 錯誤

答案:A

解釋

是的,我們可以在內部類中訪問外部類的成員。

答案:A

解釋

Kotlin 類型別名提供了一種為現有型別命名的方法,以便編寫更簡潔的程式碼,僅此而已。

廣告