kotlin類

使用class關(guān)鍵字聲明類,查看其聲明格式:

:modifiers("class"|"interface") SimpleName
 typeParameters?
 primaryConstructor?? 
(":"annotations delegationSpecifier{","})?
typeConstraints(classBody? | enumClassBody)

modifiers

包括classModifieraccessModifier:

classModifier:類屬性修飾符,標示類本身特性

//抽象類標示
abstract
//標示類不可繼承,默認屬性
final
//標示類為枚舉
enum
//類可繼承,類默認是final的
open
//注解類
annotation

accessModifier:訪問權(quán)限標識符

//僅在同一個文件中可見
private
//同一個文件中或子類可見
protected
//所有調(diào)用的地方都可見
public
//同一個模塊中可見
internal

類的聲明

類聲明由類名、類頭(指定其類型參數(shù)、主 構(gòu)造函數(shù)等)和由大括號包圍的類體構(gòu)成。類頭和類體都是可選的; 如果一個類沒有類體,可以省略話括號。

class Empty

構(gòu)造函數(shù)

可以包含一個主構(gòu)造函數(shù)和一個或者多個次構(gòu)造函數(shù)。主構(gòu)造函數(shù)是類頭的一部分,它跟在類名(和可選的類型參數(shù))后。

class Person constructor(firstName: String){
}

如果主構(gòu)造函數(shù)有任何注解或者可見性修飾符,需要增加constructor關(guān)鍵字

class Person public @Inject constructor(firstName: String){
}

1:主構(gòu)造函數(shù)(Primary constructor)

主構(gòu)造函數(shù)不能包含任何的代碼,初始化的代碼可以放到以 init 為前綴的初始化塊(initializer blocks)中:

1.1:聲明:

作為類聲明的頭部存在,類聲明結(jié)構(gòu)如下:

class Person constructor(name: String){
}

當constructor前無修飾符如(private)時,可以省略constructor

class Person(name: String){
}

當是無參構(gòu)造函數(shù)時,整個構(gòu)造函數(shù)部分也可以省略,省略的構(gòu)造函數(shù)默認是public的:

class Person{
}

1.2:初始化

由于primary constructor不能包含任何代碼,因此使用 init 代碼塊進行初始化,同時可以在代碼塊中使用構(gòu)造函數(shù)的參數(shù):

class Person(name: String){
    init {
       // 初始化...
    }
}

可以類中初始化屬性:

class Person(name: String){
? ? var customName = name.toUpperCase()
}

2:次構(gòu)造函數(shù)(Secondary Constructor)

2.1:聲明

使用constructor進行聲明,必須調(diào)用主構(gòu)造函數(shù)(Primary Constructor),使用this關(guān)鍵字:

/**
 * Primary constructor
 */
class Person(name: String) {

? ? // secondary constructor
? ? //使用constructor前綴聲明,且必須調(diào)用primary constructor,使用this關(guān)鍵字:
? ? constructor(name: String,age: Int) :this(name) {
? ? ? ? //初始化...
? ? }
}

需要注意的地方:聲明構(gòu)造函數(shù)時,允許指定參數(shù)默認值,若所有參數(shù)都被指定默認值然后編譯,編譯器會生成一個額外的無參構(gòu)造函數(shù)來使用初始化屬性為初始值。

class User(name: String="") {
}

若構(gòu)造函數(shù)中并非所有參數(shù)都有默認值,則不會生成默認無參構(gòu)造函數(shù):

class User(name: String="", age: Int) {
}

3:實例化

無需new關(guān)鍵字,即可實例化對象:

var User = User()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 類 類的定義 1 當Kotlin中的類需要構(gòu)造函數(shù)時,可以有一個主構(gòu)造函數(shù)和多個次構(gòu)造函數(shù),可以沒有次構(gòu)造函數(shù)。主...
    NiceDream閱讀 1,086評論 0 1
  • 原文地址 Classes 類在Kotlin中使用class關(guān)鍵字被聲明 類聲明由類名和類頭組成(指定它的類型參數(shù),...
    CyrusChan閱讀 656評論 0 3
  • 在 Kotlin 中所有類都有一個共同的超類 Any. 1.類關(guān)鍵字 1.kotlin 類使用關(guān)鍵字class 2...
    Lost_Robot閱讀 900評論 0 0
  • 二——中腹治孤 在圍棋界,早期的理論是“治孤容易屠龍難”。比如說,我無比尊敬的趙治勛老師就是這一理念的堅實執(zhí)行者,...
    雪方明閱讀 361評論 0 0
  • 半途效應(yīng)是指在激勵過程中達到半途時,由于心理因素及環(huán)境因素的交互作用而導致的對于目標行為的一種負面影響。 大量的事...
    wnido閱讀 724評論 0 1

友情鏈接更多精彩內(nèi)容