91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Kotlin類與繼承

發布時間:2020-07-25 23:34:06 來源:網絡 閱讀:622 作者:Mcx陌晨旭 欄目:開發技術

Kotlin使用class關鍵字聲明類,類聲明由類名、類頭(指定其類型參數、主 構造函數等)和由大括號包圍的類體組成。

類頭和類體都是可選的,如果一個類沒有類體大括號可省略

class NoBody


類的構造函數

一類可以有一個主構造函數和一個或多個次構造函數。主構造函數是類頭的一部分:它跟在類名(和可選的類型參數)后

主構造函數不能包含任何代碼塊,可用init塊初始化代碼,并且可訪問主構造函數的參數

class Person constructor(firstName: String) {
    init {
        println(firstName)
    }
}

如果類頭沒有任何注解或者可見性修飾符,constructor關鍵字可省略

class Person2(firstName: String) {
    init {
        println(firstName)
    }
}

如果構造函數有注解或可見性修飾符,這個constructor關鍵字是必需的,并且這些修飾符在它前面

class Person3 public constructor(firstName: String) {
    init {
        println(firstName)
    }
}


次構造函數

類也可以聲明次構造函數

class Animal {
    constructor(name: String) {
        println(name)
    }
}

如果一個類有主構造函數,每個次構造函數都需要委托給主構造函數,可以直接委托或者通過其它次構造函數間接委托

使用this關鍵字直接委托給當前類的主構造函數

class Animal2(name: String) {
    constructor(name: String, age: Int) : this(name) {
        println(name + age)
    }

    init {
        println(name)
    }
}

如果一非抽象類沒有任何主或者次構造函數,它會默認生成一個不帶參的主構造函數

class Animal3 {}

等同于

class Animal3(){}

將構造函數用private修飾可以防止被創建類的實例

class DontCreate private constructor() {}


創建類的實例

類定義后,需要創建實例才能使用

fun main(args: Array<String>) {
    //實例化,Kotlin類的實例化省去了new關鍵字
    var person = Person("zhangsna")
    var person1 = Animal3()

    println(person)
    println(person1)

    //private修飾符修飾的構造方法不能實例化
    //var dontCreate = DontCreate()
}


繼承

Kotlin和Java一樣都有隱式繼承,Java中一個類如果沒有顯示的繼承一個類默認繼承Object

而Kotlin中默認繼承Any

class Example  //隱式繼承Any

Any中只有 equals()、hashCode()和toString()三個方法。附Any類源碼圖

Kotlin類與繼承

在Kotlin中所有的類默認為final類型,是不能夠被繼承的。如果該類需要被繼承則必須加上open關鍵字否則該類編譯成class后是一個final類

open class Base {
}

使用:符號實現繼承,繼承的父類必須初始化

class Car : Base() {
}

如果父類主構造函數有參數子類必須聲明一個有參數的主構造函數初始化父類的構造函數

open class Device(name: String) {
    init {
        println(name)
    }
}

class Phone(name: String) : Device(name) {
}

如果父類沒有主構造函數,那么子類每個次構造函數都必須使用super關鍵字調初始化父類次構造函數

open class Device2 {
    constructor(name: String) {
        println(name)
    }

    constructor(type: Int, weight: Int) {
        println("$type" + weight)
    }
}

class Computor : Device2 {
    constructor(name: String) : super(name)
    constructor(type: Int, weight: Int) : super(type, weight)
}


覆蓋方法和屬性

Kotlin中需要overried關鍵字顯示的覆蓋成員

open class Father {
    open var a: Int = 1
    open fun say() {
        println("father say")
    }
}

class Son : Father() {
    //必須加上overried關鍵字,覆蓋父類成員
    override var a: Int = 2

    override fun say() {
        println("son say")
    }
}


抽象類和繼承

使用abstract關鍵字定義抽象類

abstract class Abstract {
    //定義抽象方法時,必能有方法體
    abstract fun absFun()
}
class Sub : Abstract() {
    //子類必須實現父類的抽象方法
    override fun absFun() {
        println("absFun of sub")
    }
}


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

桐梓县| 洞口县| 淮滨县| 丹棱县| 电白县| 双鸭山市| 淳化县| 桃江县| 翁牛特旗| 昭觉县| 伊金霍洛旗| 德钦县| 海阳市| 剑河县| 天祝| 阿鲁科尔沁旗| 花莲市| 哈尔滨市| 临海市| 东山县| 嘉祥县| 仙游县| 永丰县| 孙吴县| 屏东县| 梓潼县| 闵行区| 井研县| 莆田市| 个旧市| 洞头县| 宣威市| 祁门县| 浦县| 台北市| 高唐县| 林周县| 孟连| 木兰县| 柳州市| 安康市|