Get/Set及權限

      在〈Get/Set及權限〉中有 1 則留言

Get/Set

使用「物件.屬性」語法,表面上好像是直接存取物件變數的值。但在kotlin其實是去調用 get()及set()方法。每個物件變數都有自已的一組get及set。我們也可以覆寫這二個方法,只是若要覆寫的話,就不能使用主建構子產生物件變數,只能寫於類別內,而且必需給予初始值,其原因如下

fun main(args:Array<String>){
var p1=Pokemon(1, 2)
p1.level=1
println(p1.level)
}
class Pokemon constructor(var a:Int, var b:Int){
var level:Int=1//一定要初始化
get(){
println("返回level的值")
return field
}
set(v){
println("設定level, 並放大10倍")
field=v*10
}
/* 在這邊初始化無效
init{
this.level=1
}
*/
}
結果
設定level, 並放大10倍
返回level的值
10

上述主程式中,明明是 p1.level=1,但其值確是放大10倍,就代表了調用了set(v)方法。get()及set()必需立即置於物件變數之下,get()不能有參數,但一定要有return。set(v) 一定要有參數,且不能有return。

即然要覆寫get及set時一定要置於物件變數之下,那麼也就只有將物件變數宣告於類別之內才有機會。若使用主建構子宣告物件變數,那就沒有任何機會了。

另外在get及set裏,field 是一個關鍵字, 代表著本變數的意思

權限

物件變數的權限,預設(也就是沒寫權限修飾子)是public。另一個權限為private, 其範圍涵蓋整個類別。所以如果在物件變數前面加上private,則禁止在類別之外進行存取。

🔒 底下內容僅限會員閱讀。

立即登入

1 thought on “Get/Set及權限

  1. Zack Placencio

    I’m amazed by your capacity to turn even the most common topics into engaging content. Well done to you!

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *