Kotlin 中使用关键字 class 声明类
class Invoice {
}
类声明由类名、类头(指定其类型参数、主 构造函数等) 和由大括号包围的类体构成。类头
和类体都是可选的;
若是一个类没有类体,能够省略花括号。
class MyClass
构造函数
在 Kotlin 中的一个类能够有一个主构造函数和一个或多个次构造函数。主 构造函数是类头的
一部分:它跟在类名(和可选的类型参数) 后。
关键字class +类名+构造函数关键字constructor+(参数)函数
若是主构造函数没有任何注解或者可见性修饰符,能够省略这个 constructor 关键字。
class Person(firstName: String) {
}
主构造函数不能包含任何的代码。
初始化的代码能够放 到以 init 关键字做为前缀的初始化块(initializer blocks) 中:
class Customer(name: String) {
init {
logger.info("Customer initialized with value ${name}")
}
}
事实上,声明属性以及从主构造函数初始化属性,Kotlin 有简洁的语法:
class Person(val firstName: String, val lastName: String, var age: Int) {
// ……
} 没看明白,在构造方法声明的参数,属于类属性吗??????????????
构造方法的参数声明中 val 能够省略,若是不写默认val ;this
证实上面的理解是对的。构造方法的参数就是类的属性。val声明就是不可变,var是可变。很奇葩!spa
与普通属性同样,主构造函数中声明的属性能够是 可变的(var ) 或只读的(val ) 。
若是构造函数有注解或可见性修饰符,这个 constructor 关键字是必需的,而且 这些修饰符
在它前面:
class Customer public @Inject constructor(name: String) {3d
…… 对象
}
blog
次构造函数
类也能够声明前缀有 constructor 的次构造函数:
class Person {
constructor(parent: Person) {
parent.children.add(this)
}
}
若是类有一个主构造函数,每一个次构造函数须要委托给主构造函数, 能够直接委托或者经过
别的次构造函数间接委托。委托到同一个类的另外一个构造函数 用 this 关键字便可:
class Person(val name: String) {
constructor(name: String, parent: Person) : this(name) {
parent.children.add(this)
}
}
若是一个非抽象类没有声明任何(主或次) 构造函数,它会有一个生成的 不带参数的主构造
函数。构造函数的可见性是 public。若是你不但愿你的类 有一个公有构造函数,你须要声明
一个带有非默承认见性的空的主构造函数:
类和继承
class DontCreateMe private constructor () {
}
注意:在 JVM 上,若是主构造函数的全部的参数都有默认值,编译器会生成 一个额外
的无参构造函数,它将使用默认值。这使得 Kotlin 更易于使用像 Jackson 或者 JPA 这样
的经过无参构造函数建立类的实例的库。
class Customer(val customerName: String = "")
{:.info}
建立类的实例
要建立一个类的实例,咱们就像普通函数同样调用构造函数:
val invoice = Invoice()
val customer = Customer("Joe Smith")
注意 Kotlin 并无 new 关键字。
建立嵌套类、内部类和匿名内部类的类实例在嵌套类中有述。
继承
类成员
类能够包含
构造函数和初始化块
函数
属性
嵌套类和内部类
对象声明
编译器