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}") }
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
關鍵字聲明一個編譯時常量但它須要知足如下要求:
String
與原始類型const val COMPILE_CONSTANT = ""
《架構文摘》天天一篇架構領域重磅好文,涉及一線互聯網公司應用架構(高可用、高性 能、高穩定)、大數據、機器學習等各個熱門領域。