在上一次https://www.cnblogs.com/webor2006/p/11192025.html已經初識了Kolin的面向對象,先來回顧一下:
介紹了primary 構造方法,其特點回憶一下:
其中一個類中還有可能有多個sdcondary構造方法,所以接下來會來學習它,先定義一個帶一個參數的primary構造方法:
然后給類中定義三個成員變量,先來定義一個:
這跟Java是完全不一樣的,解決辦法之一是將其定義成abstract的,但是關於abstract的定義之后再系統學習,所以目前咱們只能對這個變量進行初始化一下下了,這里可以放到init塊中,如下:
其實我們可以發現:
接着再定義兩個成員屬性,如下:
接下來則來學習一下secondary構造方法的定義,它是定義在類體當中的,下面來定義一個:
言外之意就是說在我們定義secondary構造方法時,一定是要直接或者間接去調用primary構造方法的,所以:
這樣第一個secondary構造方法就定義好了,可以發現構造方法是沒有名字的,這也是跟Java的一個不同點。接着再定義第二個secondary構造方法,如下:
接下來則定義一個打印方法,然后調用看一下:
針對這個程序再來多說幾點:
1、如果對於一個類未定義任何構造方法,則默認會生成一個primary構造方法。
2、如果沒有給構造方法加訪問修飾符【未來會詳細學習它的】,默認是public級別的,這個跟Java是不一樣的。所以如果想私有構造則需:
接下來Kotlin其實還有更加簡便的方式能夠在構造時就能夠對類的屬性進行賦值,也是跟Java完全不一樣的,具體看一下如何寫:
其中private是可以去掉的:
IDE會提示:
還是將其還原成private,下面來調用一下:
另外對於之前primary構造方法的定義規則:
下面用代碼來驗證一下:
變成:
但是,如果加了訪問修飾符:
將constructor給去掉,會立馬報錯:
另外構造參數可以定義默認參數,類似c++,如下:
下面來使用一下:
同時創建時也繼續可以傳遞新參數,如下:
另外還有點需要明白:“在JVM上,如果類的primary構造方法的所有參數都擁有默認值,那么Kotlin編譯器就會為這個類生成一個不帶參數的構造方法。這個不帶參數的構造方法會使用這些參數的默認值,這樣做的目的在於可以跟Spring等框架更好地集成。”