今天要介紹的是類別(Class),在物件導向( Object-oriented programming )中,我們可以以生活中的事物來做比喻會比較好理解。
車是一個類別,而這個類別有特有的屬性、行為,甚至這個類別底下還有其他類別( 車有分 TOYOTA、HONDA… )。
以上不懂沒關係,先自動跳過它吧,我們在日後的介紹繼承的時候會對這部分在做更詳細的解說,今天先以如何建構出一個類別為主題吧!
首先,先比較一下如果要建一個名為 Person 的 Class , Java 和 Kotlin 的寫法有什麼差異。
public class Person{
//宣告屬性
private final String name;
//建構子
public Person(String name){
this.name = name;
}
}
class Person Constructor by Java
//建構子
class Person constructor(_name: String) {
//宣告屬性
val name: String
//initial block
init {
name= _name
}
}
看到這你一定滿頭問號,Kotlin 不是標榜簡潔程式碼嗎?
怎麼和 Java 比較起來差不多呢?
客官別急,這邊寫的 Kotlin 寫法是最完整的寫法,Kotlin 的省略功力等會兒就展現出來!
在上一篇文中,加法器的範例,在我們宣告變數C時,同時可以賦值給它,很幸運地,這不僅僅適用於整數型態,在各種型態都可以這麼做,包含這次範例的 String ,所以我們可以在宣告變數 name 的同時給予其值,可以將 init block 省略成以下。
//建構子
class Person (_name: String) {
//宣告屬性
val name = _name
}
開始有省略的感覺了吧!
但是,若是有東西必須得在 init block 裡執行,init block 還是不能被省略的!
那,讓我們繼續簡化程式碼吧!
在這個 class 裡,帶進來一個參數,又宣告一個變數讓它等於帶進來的參數。
呃,這段話看起來既冗長又複雜,Kotlin 最不喜歡複雜的東西了!
於是就產生了 Kotlin 極簡的寫法,將宣告參數寫在建構子裡,到時候需要實例化該類別時,傳進來的參數即等於該變數,來看看怎麼寫吧!
//建構子
class Person (val name: String) {
}
class 的介紹其實不只這樣,這邊是介紹 class 的寫法與其建構子,其後還有 class 繼承需要介紹,待日後再來講解吧!