Kotlin學(xué)習(xí)手冊(一)類與繼承

如需轉(zhuǎn)載請評論或簡信幢尚,并注明出處弥锄,未經(jīng)允許不得轉(zhuǎn)載

Kotlin系列導(dǎo)讀

Kotlin學(xué)習(xí)手冊(一)類與繼承
Kotlin學(xué)習(xí)手冊(二)屬性與字段
Kotlin學(xué)習(xí)手冊(三)接口
Kotlin學(xué)習(xí)手冊(四)內(nèi)部類
Kotlin學(xué)習(xí)手冊(五)函數(shù)
Kotlin學(xué)習(xí)手冊(六)數(shù)組與集合
Kotlin學(xué)習(xí)手冊(七)for循環(huán)
Kotlin學(xué)習(xí)手冊(八)內(nèi)聯(lián)函數(shù)let殊者、with、run块饺、apply奕枝、also
Kotlin學(xué)習(xí)手冊(九)空類型安全
Kotlin學(xué)習(xí)手冊(十)帶你真正理解什么是Kotlin協(xié)程

目錄

.java

public class Person {
    private String name;
  
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

.kotlin

class Person {
    var name: String? = null
}

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

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

.java

public class Person {
    private String name;

    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

.kotlin

在 Kotlin 中的一個類可以有一個主構(gòu)造函數(shù)以及一個或多個次構(gòu)造函數(shù)(constructor)

主構(gòu)造函數(shù)是類頭的一部分,它跟在類名后

class Person(var name: String?)

次構(gòu)造函數(shù)(構(gòu)造函數(shù)重載)

.java

public class Person {
    private String name;
    private String address;

    public Person(String name) {
        this.name = name;
    }

    public Person(String name,String address) {
        this.name = name;
        this.address = address;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

.kotlin

類也可以聲明前綴有 constructor次構(gòu)造函數(shù)

class Person {
    var name: String? = null
    var address: String? = null

    constructor(name: String) {
        this.name = name
    }

    constructor(name: String, address: String) {
        this.name = name
        this.address = address
    }
}

init代碼塊

.java

public class Person {
    private String name;

    public Person(String name) {
        this.name = name;
                //添加代碼
        System.out.print("My name is " + name);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

.kotlin

主構(gòu)造函數(shù)不能包含任何的代碼岸夯。初始化的代碼可以放到以 init 關(guān)鍵字作為前綴的初始化塊中

class Person(var name: String?) {
    init {
        //主構(gòu)造的參數(shù)(name)可以在初始化塊中使用
        print("My name is $name")
    }
}

注意:如果同時包含init和次構(gòu)造函數(shù)麻献,init會優(yōu)先于次構(gòu)造函數(shù)執(zhí)行

創(chuàng)建類的實例

.java

Person person = new Person("geekholt");

.kotlin

Kotlin 并沒有 new關(guān)鍵字

val person = Person("geekholt")

繼承

在 Kotlin 中所有類都有一個共同的超類 Any,這對于沒有超類型聲明的類是默認超類猜扮,類似java中的Object

Any 有三個方法:equals()勉吻、 hashCode()toString()。因此旅赢,為所有 Kotlin 類都定義了這些方法

基類只有主構(gòu)造函數(shù)

.java

public class Person {
    private String name;

    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}
public class Man extends Person {

    public Man(String name) {
        super(name);
    }
}

.kotlin

class Man(name: String) : Person(name)

基類只有次構(gòu)造函數(shù)

.java

public class Person {
    private String name;
    private String address;

    public Person(String name) {
        this.name = name;
    }

    public Person(String name, String address) {
        this.name = name;
        this.address = address;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}
public class Man extends Person {

    public Man(String name) {
        super(name);
    }

    public Man(String name, String address) {
        super(name, address);
    }
}

.kotlin

class Man : Person {

    constructor(name: String) : super(name) {}

    constructor(name: String, address: String) : super(name, address) {}
}

重寫父類方法

.java

public class Person {

    public void sayHello() {

    }
}
public class Man extends Person {
    @Override
    public void sayHello() {
        System.out.print("Hello");
    }
}

.kotlin

kotlin中如果不加open關(guān)鍵字齿桃,默認類、方法都是final的煮盼,即不可被重寫短纵。所以對需要進行重寫的方法要加上open關(guān)鍵字

open class Person {

    open fun sayHello() {

    }
}
class Man : Person() {
    override fun sayHello() {
        print("Hello")
    }
}

注意:由于基類會優(yōu)先于派生類進行初始化,也就意味著基類構(gòu)造函數(shù)執(zhí)行時僵控,派生類中聲明或覆蓋的屬性都還沒有初始化香到,所以設(shè)計一個基類時,應(yīng)該避免在構(gòu)造函數(shù)报破、屬性初始化器以及 init 塊中使用 open 成員

抽象類

.java

abstract public class Person {

    public abstract void sayHello();
}

.kotlin

我們并不需要用 open 標注一個抽象類或者函數(shù)——因為這不言而喻悠就。

abstract class Person {

    abstract fun sayHello()
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者充易。
  • 序言:七十年代末梗脾,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子盹靴,更是在濱河造成了極大的恐慌炸茧,老刑警劉巖瑞妇,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異宇立,居然都是意外死亡踪宠,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門妈嘹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來柳琢,“玉大人,你說我怎么就攤上這事润脸〖砹常” “怎么了?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵毙驯,是天一觀的道長倒堕。 經(jīng)常有香客問我,道長爆价,這世上最難降的妖魔是什么垦巴? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮铭段,結(jié)果婚禮上骤宣,老公的妹妹穿的比我還像新娘。我一直安慰自己序愚,他們只是感情好憔披,可當我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著爸吮,像睡著了一般芬膝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上形娇,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天锰霜,我揣著相機與錄音,去河邊找鬼埂软。 笑死锈遥,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的勘畔。 我是一名探鬼主播所灸,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼炫七!你這毒婦竟也來了爬立?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤万哪,失蹤者是張志新(化名)和其女友劉穎侠驯,沒想到半個月后抡秆,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡吟策,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年儒士,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片檩坚。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡着撩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出匾委,到底是詐尸還是另有隱情拖叙,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布赂乐,位于F島的核電站薯鳍,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏挨措。R本人自食惡果不足惜挖滤,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望浅役。 院中可真熱鬧壶辜,春花似錦、人聲如沸担租。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽奋救。三九已至,卻和暖如春反惕,著一層夾襖步出監(jiān)牢的瞬間尝艘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工姿染, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留背亥,地道東北人。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓悬赏,卻偏偏與公主長得像狡汉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子闽颇,可洞房花燭夜當晚...
    茶點故事閱讀 43,697評論 2 351