Kotlin中類的定義

一、類的定義和屬性的getter姚垃、setter方法

1.類的定義使用class關鍵字
2.類中的屬性默認實現了getter和setter方法(eg:Person中的age屬性),如果要修改類中屬性的getter和setter方法虱朵,參考Person類中name屬性
3.只有可變屬性才會有setting

class Person() {
    var age:Int=0
    var name: String = "unknow"
        get() = field.capitalize()
        set(value) {
            field = value.trim()
        }
}

二、構造函數

三碴犬、初始化順序

1.主構造函數聲明的屬性
2.類級別的屬性按聲明屬性依次賦值
3.init初始化代碼塊里的屬性賦值和函數調用
4.次構造函數里的屬性賦值和函數調用
注意:init代碼塊中用到的屬性需要再init代碼塊之前聲明服协,因為kotlin的編譯時自上而下的

class Student(_name:String,val age:Int){

    var name = _name
    var score = 10
    private val hobby="music"
    val subject:String
    init {
        println("initializing student")
        subject ="math"
    }

    constructor(_name:String):this(_name,10){
        score = 20
    }
}


//編譯成java代碼
 public Student(@NotNull String _name, int age) {
      Intrinsics.checkNotNullParameter(_name, "_name");
      super();
      //柱構造函數的屬性
      this.age = age;
//類級別的屬性賦值
      this.name = _name;
      this.score = 10;
      this.hobby = "music";
//init{}代碼塊
      String var3 = "initializing student";
      boolean var4 = false;
      System.out.println(var3);
//init代碼塊中的屬性賦值
      this.subject = "math";
   }

   public Student(@NotNull String _name) {
      Intrinsics.checkNotNullParameter(_name, "_name");
      this(_name, 10);
//次構造函數中的屬性賦值
      this.score = 20;
   }

在次構造函數Student(@NotNull String _name)中又調用了主構造函數this(_name, 10)

四偿荷、延遲初始化lateinit

1.lalteinit約定在使用該變量之前初始化
2.只要無法確認lateinit變量是否完成初始化,可以執(zhí)行isInitialized檢查

class Student(val age: Int) {
    lateinit var subject: String
    fun ready(){
        subject = "math"
    }

    fun battle(){
        if (::subject.isInitialized){
            println(subject)
        }
    }
}

五跳纳、惰性初始化 lazy

class Student(val name:String) {
    //屬性被調用的時候執(zhí)行
    private val subject:String by lazy{
        initSubject()
    }

    //調用構造函數的時候執(zhí)行
    private val subject2:String = initSubject()

    fun initSubject():String{
        Log.i("AAA","loading init subject")
        return "Math"
    }

}

六贪嫂、object關鍵字

1.定義一個靜態(tài)類
2.定義一個匿名類
3.定義一個伴生對象

七、嵌套類

在其他類中調用的時候如下

  fun testJunior(){
        val juniorStudent = Student.JuniorStudent("Jack")
    }
class Student(val name:String) {
    class JuniorStudent(val name:String)
}

八斗塘、數據類

1.數據類 是專門設計用來存儲數據的類
2.數據類提供了toString()的個性化實現
3.==符號默認情況下,比較對象就是比較他們的引用值
4于置、copy函數調用的是主構造函數,在次構造函數中賦值的屬性值實際并沒有賦值八毯,需要主動賦值

data class Teacher(val name:String)

轉義為Java代碼如下瞄桨,默認實現了toString()、equals()讲婚、hashCode()、copy()方法,同時實現了component1()用于結構語法

public final class Teacher {
   @NotNull
   private final String name;

   @NotNull
   public final String getName() {
      return this.name;
   }

   public Teacher(@NotNull String name) {
      Intrinsics.checkNotNullParameter(name, "name");
      super();
      this.name = name;
   }

   @NotNull
   public final String component1() {
      return this.name;
   }

   @NotNull
   public final Teacher copy(@NotNull String name) {
      Intrinsics.checkNotNullParameter(name, "name");
      return new Teacher(name);
   }

   // $FF: synthetic method
   public static Teacher copy$default(Teacher var0, String var1, int var2, Object var3) {
      if ((var2 & 1) != 0) {
         var1 = var0.name;
      }

      return var0.copy(var1);
   }

   @NotNull
   public String toString() {
      return "Teacher(name=" + this.name + ")";
   }

   public int hashCode() {
      String var10000 = this.name;
      return var10000 != null ? var10000.hashCode() : 0;
   }

   public boolean equals(@Nullable Object var1) {
      if (this != var1) {
         if (var1 instanceof Teacher) {
            Teacher var2 = (Teacher)var1;
            if (Intrinsics.areEqual(this.name, var2.name)) {
               return true;
            }
         }

         return false;
      } else {
         return true;
      }
   }
}

九活合、結構聲明

1.數據類直接支持結構語法

fun main() {
    val (name, age, subject) = Teacher("Jack", 28, "Math")
    println("$name--$age--$subject")
}

class Teacher(private val name: String, private val age: Int, private val subject: String) {
    operator fun component1() = name
    operator fun component2() = age
    operator fun component3() = subject
}

十白指、枚舉類 emun class

enum class LicenseStatus(){
    UnQualified,
    Learning,
    Qualified;
    var licenseId:String=""
}

十一、密封類 sealed class

密封類可以定義一個類似于枚舉類的ADT,可以有若干個子類告嘲,要繼承密封類奖地,這些子類必須和它定義在用一個文件中。相對枚舉類参歹,密封類可以更加靈活的控制子類的特殊性。

sealed class LicenseStatus{
    object UnQualified:LicenseStatus()
    object Learning:LicenseStatus()
//特殊屬性 licenseId
    class Qualified(val licenseId:String):LicenseStatus()
}

十二僧界、接口

interface OnItemClickListener {
    fun onItemClick(view: View)
}

十三、抽象類abstract

abstract class Human(val age:Int){
    abstract fun eat()
}
class American(val name:String, age:Int):Human(age) {
    override fun eat() {
        Log.i("AAA","I have hamburger")
    }
}
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末捂襟,一起剝皮案震驚了整個濱河市欢峰,隨后出現的幾起案子涨共,更是在濱河造成了極大的恐慌闯狱,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件照筑,死亡現場離奇詭異瘦陈,居然都是意外死亡,警方通過查閱死者的電腦和手機晨逝,發(fā)現死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來支鸡,“玉大人趁窃,你說我怎么就攤上這事⌒崖剑” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵寺晌,是天一觀的道長。 經常有香客問我呻征,道長罢浇,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任己莺,我火速辦了婚禮凌受,結果婚禮上,老公的妹妹穿的比我還像新娘胜蛉。我一直安慰自己,他們只是感情好誊册,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著案怯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪嘲碱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天恕稠,我揣著相機與錄音扶欣,去河邊找鬼。 笑死料祠,一個胖子當著我的面吹牛,可吹牛的內容都是我干的术陶。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼接谨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了脓豪?” 一聲冷哼從身側響起忌卤,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎驰徊,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體颗味,經...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡牺弹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年时呀,在試婚紗的時候發(fā)現自己被綠了晶默。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡趴梢,死狀恐怖,靈堂內的尸體忽然破棺而出垢油,到底是詐尸還是另有隱情,我是刑警寧澤滩愁,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布辫封,位于F島的核電站,受9級特大地震影響倦微,放射性物質發(fā)生泄漏。R本人自食惡果不足惜欣福,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望拓劝。 院中可真熱鬧,春花似錦郑临、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽丧叽。三九已至,卻和暖如春蠢正,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背嚣崭。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工懦傍, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人粗俱。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像签财,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子唱蒸,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內容