在本文中,將向您介紹Kotlin中的面向?qū)ο缶幊?。您將學(xué)習(xí)什么是類,如何創(chuàng)建對象以及如何在程序中使用它。
Kotlin支持函數(shù)和面向?qū)ο蟮木幊獭?/p>
Kotlin支持諸如高階函數(shù),函數(shù)類型 和 lambda之類的函數(shù),這使其成為使用函數(shù)式編程風(fēng)格的理想選擇。您將在后面的章節(jié)中了解這些概念。本文將重點(diǎn)介紹Kotlin中的面向?qū)ο缶幊田L(fēng)格。
在面向?qū)ο蟮木幊田L(fēng)格中,可以通過創(chuàng)建對象將復(fù)雜的問題分為較小的集合。
這些對象具有兩個(gè)特征:
狀態(tài)
行為
讓我們舉幾個(gè)實(shí)例:
Lamp(燈) 是一個(gè)對象
它可以處于 on(亮著) 或 off(熄滅) 狀態(tài)。
你可以 turn on(開燈) 和turn off (關(guān)燈)(行為)。
Bicycle 是一個(gè)對象
它有 檔位,兩個(gè)輪子,齒輪數(shù) 等狀態(tài)。
它有 剎車,加速,換擋 等行為。
您將繼續(xù)學(xué)習(xí)面向?qū)ο缶幊痰脑敿?xì)功能,例如:數(shù)據(jù)封裝,繼承 和 多態(tài)。本文將重點(diǎn)介紹使事情變得簡單的基礎(chǔ)知識。
在Kotlin中創(chuàng)建對象之前,您需要定義一個(gè)類。
類是對象的藍(lán)圖。
我們可以將類視為房子的草圖(原型)。它包含有關(guān)地板,門,窗戶等的所有詳細(xì)信息?;谶@些描述,我們建造了房屋。房子是對象。
由于可以用相同的描述建造許多房屋,因此我們可以根據(jù)一個(gè)類創(chuàng)建許多對象。
要在Kotlin中定義一個(gè)類,可以使用關(guān)鍵字 class:
class ClassName { // 屬性 // 成員函數(shù) ... .. ... }
這是一個(gè)實(shí)例:
class Lamp { //屬性(數(shù)據(jù)成員) private var isOn: Boolean = false // 成員函數(shù) fun turnOn() { isOn = true } // 成員函數(shù) fun turnOff() { isOn = false } }
在這里,我們定義了一個(gè)名為 Lamp 的類。
該類具有一個(gè)屬性 isOn(定義方式與變量相同),并且具有兩個(gè)成員函數(shù) turnOn() 和 turnOff()。
在Kotlin中,要么必須初始化屬性,要么必須聲明為 abstract。在上面的示例中,isOn 屬性初始化為 false。
類,對象,屬性,成員函數(shù)等可以具有可見性修飾符。 例如,isOn屬性是私有的。 這意味著,只能在Lamp類內(nèi)部更改isOn屬性。
其他可見性修飾符是:
private - 僅在類內(nèi)部可見(可以訪問)。
public - 所有地方可見。
protected - 對類及其子類可見。
internal - 模塊內(nèi)的任何客戶端都可以訪問它們。
您稍后將在Kotlin可見性修飾符文章中了解protected和internal修改器。
如果未指定可見性修飾符,則默認(rèn)情況下為默認(rèn)值 public 。
在上面的程序中,turnOn()和turnOff()成員函數(shù)是公共的,而 isOn 屬性是私有的。
定義類時(shí),僅定義對象的規(guī)范;沒有分配內(nèi)存或存儲(chǔ)空間。
要訪問在類中定義的成員,您需要?jiǎng)?chuàng)建對象。讓我們創(chuàng)建Lamp類的對象。
class Lamp { // 屬性(數(shù)據(jù)成員) private var isOn: Boolean = false // 成員函數(shù) fun turnOn() { isOn = true } // 成員函數(shù) fun turnOff() { isOn = false } } fun main(args: Array<String>) { val l1 = Lamp() // 創(chuàng)建 Lamp 類的 l1對象 val l2 = Lamp() // 創(chuàng)建 Lamp 類的 l2對象 }
此程序創(chuàng)建兩個(gè)對象l1和l2類Lamp。該isOn兩個(gè)燈泡性能l1和l2會(huì)false。
您可以使用 . 符號來訪問類的屬性和成員函數(shù)。例如,
l1.turnOn()
該語句調(diào)用對象 l1 的 turnOn() 函數(shù)。
讓我們再舉一個(gè)實(shí)例:
l2.isOn = true
在這里,我們嘗試分配 true 給對象 l2 的 isOn 屬性。請注意,isOnproperty 是 private,如果您嘗試從類外部訪問 isOn ,則會(huì)引發(fā)異常。
class Lamp { // 屬性(數(shù)據(jù)成員) private var isOn: Boolean = false // 成員函數(shù) fun turnOn() { isOn = true } // 成員函數(shù) fun turnOff() { isOn = false } fun displayLightStatus(lamp: String) { if (isOn == true) println("$lamp 燈是亮著的。") else println("$lamp 燈是熄滅的。") } } fun main(args: Array<String>) { val l1 = Lamp() // 創(chuàng)建 Lamp 類的 l1對象 val l2 = Lamp() // 創(chuàng)建 Lamp 類的 l2對象 l1.turnOn() l2.turnOff() l1.displayLightStatus("l1") l2.displayLightStatus("l2") }
運(yùn)行該程序時(shí),輸出為:
l1 燈是亮著的。 l2 燈是熄滅的。
在上面的程序中,
Lamp 類已創(chuàng)建。
該類具有一個(gè)屬性 isOn 和三個(gè)成員函數(shù) turnOn(),turnOff() 以及 displayLightStatus()。
在main()函數(shù)中創(chuàng)建了Lamp類的兩個(gè)對象L1和L2。
在這里,使用l1對象l1.turnOn()調(diào)用turnOn()函數(shù)。 此方法將l1對象的isOn實(shí)例變量設(shè)置為true。
同時(shí),使用 l2 對象:l2.turnOff()調(diào)用 turnOff()函數(shù)。 此方法將l2對象的isOff實(shí)例變量設(shè)置為false。
然后,對l1和l2對象調(diào)用displayLightStatus()函數(shù),該函數(shù)根據(jù)isOn屬性是true還是false來打印適當(dāng)?shù)南ⅰ?/p>
注意,在類內(nèi)部,isOn 屬性被初始化為 false。 創(chuàng)建該類的對象時(shí),該對象的 isOn 屬性將自動(dòng)初始化為 false。 因此,不需要 l2 對象調(diào)用 turnOff()將 isOn屬性設(shè)置為false。
例如:
class Lamp { // 屬性(數(shù)據(jù)成員) private var isOn: Boolean = false // 成員函數(shù) fun turnOn() { isOn = true } // 成員函數(shù) fun turnOff() { isOn = false } fun displayLightStatus() { if (isOn == true) println("燈亮著。") else println("燈熄滅了。") } } fun main(args: Array<String>) { val lamp = Lamp() lamp.displayLightStatus() }
運(yùn)行該程序時(shí),輸出為:
燈熄滅了。
本文只是Kotlin中面向?qū)ο缶幊痰幕A(chǔ)知識。