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 = ""
《架构文摘》天天一篇架构领域重磅好文,涉及一线互联网公司应用架构(高可用、高性 能、高稳定)、大数据、机器学习等各个热门领域。