Kotlin的构造方法分为主构造方法(primary)和次构造方法(secondary),主构造方法定义在类名之后,次构造方法定义在类体内部,主次构造方法可以同时出现也可以单独出现。
主构造方法如下:
class Person constructor(firstName: String) { ... }
constructor可省略:
class Person(firstName: String) { ... }
次构造方法不可省略constructor,如下:
class Person {
constructor(parent: Person) {
parent.children.add(this)
}
}
从内部类调用外部类的成员请使用super@Class,如下:
class Bar : Foo() {
override fun f() { /* ... */ }
override val x: Int get() = 0
inner class Baz {
fun g() {
super@Bar.f() // Calls Foo's implementation of f()
println(super@Bar.x) // Uses Foo's implementation of x's getter
}
}
}
多继承情况下的超类成员调用请使用super<Parent>,如下:
open class A {
open fun f() { print("A") }
fun a() { print("a") }
}
interface B {
fun f() { print("B") } // interface members are 'open' by default
fun b() { print("b") }
}
class C() : A(), B {
// The compiler requires f() to be overridden:
override fun f() {
super<A>.f() // call to A.f()
super<B>.f() // call to B.f()
}
}
非抽象方法可以在衍生类中被override为抽象方法,如下:
open class Base {
open fun f() {}
}
abstract class Derived : Base() {
override abstract fun f()
}