Kotlin學習系列(三)

類聲明

Kotlin使用class關鍵字聲明類:java

class Invoice{

}

Kotlin類聲明基本包括header與body:架構

[<Modifier>] <class> [<Visibility modifiers>]  <className> [<constructor>]
[< body>]

構造器

kotlin的類能有一個主要的構造器與多個次要的構造器。主構造器出如今類名的後面參數是可選的。機器學習

class Person constructor(firstName: String){
    ...
}

若是主構造器沒有註解或可見修飾符constructor關鍵字能夠省略:ide

class Person(firstName: String){
...
}

Kotlin可以使用constructor聲明多個次要的構造器:性能

class Person{
    constructor(parent: Person){
    
     }
     
       constructor(name: String, parent: Person){
    
     }
}

若是類有一個主構造器其餘的構造器都須要去直接或間接的調用它:學習

class Person(val name: String){
    constructor(name: String, parent: Person): this(name){
      
     }
}

建立實例

Kotlin沒有new關鍵字,建立類的實例只須要調用對應的構造方法:大數據

val invoice = Invoice()
val person = Person("xx")

繼承

全部的class有一個共同的超類Any若是類聲明時沒有指定超類默認繼承Any:this

class Empty  //默認繼承Any

繼承一個指定的類經過在class header後面添加冒號與父類:code

open class Base(p: Int)

class Derived(p: Int): Base(p)  //指定構造器

若是子類有主構造器能夠在class header中初始化超類,若是該類沒有主構造器由其餘的構造器經過super關鍵字直接或間接始化超類:對象

open class Base(p: Int)

class Derived: Base{

    constructor(p: Int): super(p){

    }
}

open註解與java中的final相反表示類是否能夠被繼承,Kotlin中全部的類默認是final

重寫成員方法

Kotlin使用open標記成員是否可被重寫,override顯示說明該成員重寫父類方法:

open class Base {
    open fun v() {}
    fun nv() {}
}
class Derived() : Base() {
    override fun v() {}
}

屬性

聲明屬性語法:

var <propertyName>: <PropertyType> [= <property_initializer>]
  [<getter>]
  [<setter>]

除了初始化和getter/setter是可選的之外屬性類型若是可以推斷出的話也能夠省略。只讀屬性的聲明
語法與可讀屬性聲明只有兩個差異:使用val替換var、沒有setter。

Kotlin中的類聲明可變的(var)屬性與只讀(val)屬性:

class Person{
    public var name: String = ""
    public val IdCard: String =  "xxx"

}

經過屬性名稱使用類中的屬性,相似Java中的Field:

fun out(p: Person){

    println("name: ${p.name}")
    println("id: ${p.id}")
}

getter/setter:

public var name: String
    get() = "undefined"
    set(value) {

    }

若是隻須要從新定義getter/setter的可見性或註解它們但不須要去更改它們行爲能夠只定義getter/setter不須要定義主體:

public var name: String = ""
    get() = "undefined"
    private @Inject set

Kotlin中不能有field,可是在自定義getter/setter的時候可能須要去直接訪問屬性而不是經過getter/settter。Kotlin自動提供
一個備用字段(field),經過它使用使用屬性標識符來訪問它。

public var fieldProp = ""
    get() = field
    set(value) {
        field = value;
    }

編譯時常量

若是屬性能在編譯時就已經肯定它的值可使用const關鍵字聲明一個編譯時常量但它須要知足如下要求:

  1. 只要出如今最頂層或對象內部
  2. 只支持String與原始類型
  3. 沒法算自定義getter
const val COMPILE_CONSTANT = ""




《架構文摘》天天一篇架構領域重磅好文,涉及一線互聯網公司應用架構(高可用、高性 能、高穩定)、大數據、機器學習等各個熱門領域。

相關文章
相關標籤/搜索