Kotlin类的继承和重载方法
继承
Kotlin中的所有类都有一个通用的超类:Any
,这是一个没有父类型的类的默认超类。
class Example // Implicitly inherits from Any
Any
不是java.lang.Object
; 特别地要说明的是,除了equals()
,hashCode()
和toString()
之外,它不具有其它任何成员函数。有关更多详细信息,请参阅Java互操作性部分。
要声明一个显式的超类型,将冒号后面的类型放在类头中:
open class Base(p: Int)
class Derived(p: Int) : Base(p)
如果类具有主构造函数,则可以使用主构造函数的参数(并且必须)初始化基类型。
如果类没有主构造函数,则每个辅助构造函数必须使用super
关键字初始化基类型,或者委托给另一个构造函数。 请注意,在这种情况下,不同的辅助构造函数可以调用基类型的不同构造函数:
class MyView : View {
constructor(ctx: Context) : super(ctx)
constructor(ctx: Context, attrs: AttributeSet) : super(ctx, attrs)
}
一个类的开放(open
)注释与Java的最终结果相反:它允许其他人继承这个类。 默认情况下,Kotlin中的所有类都是final
,它对应于有效Java用法,设计和继承的文档或者禁止它。
重载方法
正如前面提到的,与Java不同的是,Kotlin需要对可覆盖成员进行显式注释(称之为open
)和覆盖:
open class Base {
open fun v() {}
fun nv() {}
}
class Derived() : Base() {
override fun v() {}
}
Derived.v()
需要覆盖(override
)注释。 如果缺少(override
)注释,编译器会抱错。 如果在一个函数上没有open
注释,如在Base.nv()
中,在子类中声明一个具有相同签名的方法是非法的,无论是否有覆盖(override
)注释还是没有。 在final
类(例如不使用open
注释的类)中,则禁止覆盖成员。
标记为覆盖(override
)的成员本身是打开的,即它可以在子类中被覆盖。 如果要禁止重新覆盖,请使用final
关键字:
open class AnotherDerived() : Base() {
final override fun v() {}
}
father类:
open class father {
var chactor:String="外向"
open fun action(){
println("喜欢大声说话!!!")
}
}
son类:
class son:father() { //子类继承父类的方式
override fun action(){ //方法重载
println("儿子很乖,说话少!!!!!!!!")
}
}
test文件:
fun main(args: Array<String>) {
var sons=son() //对象的声明
println("儿子的性格${sons.chactor}") //儿子继承父类的变量
sons.action()
}
运行结果:
儿子的性格性格外向
儿子很乖,说话少!!!!!!!!