Kotlin类的继承和重载方法

Kotlin类的继承和重载方法

继承

Kotlin中的所有类都有一个通用的超类:Any,这是一个没有父类型的类的默认超类。

class Example // Implicitly inherits from Any
Kotlin

Any不是java.lang.Object; 特别地要说明的是,除了equals()hashCode()toString()之外,它不具有其它任何成员函数。有关更多详细信息,请参阅Java互操作性部分。

要声明一个显式的超类型,将冒号后面的类型放在类头中:

open class Base(p: Int)

class Derived(p: Int) : Base(p)
Kotlin

如果类具有主构造函数,则可以使用主构造函数的参数(并且必须)初始化基类型。

如果类没有主构造函数,则每个辅助构造函数必须使用super关键字初始化基类型,或者委托给另一个构造函数。 请注意,在这种情况下,不同的辅助构造函数可以调用基类型的不同构造函数:

class MyView : View {
    constructor(ctx: Context) : super(ctx)

    constructor(ctx: Context, attrs: AttributeSet) : super(ctx, attrs)
}
Kotlin

一个类的开放(open)注释与Java的最终结果相反:它允许其他人继承这个类。 默认情况下,Kotlin中的所有类都是final,它对应于有效Java用法,设计和继承的文档或者禁止它。

重载方法

正如前面提到的,与Java不同的是,Kotlin需要对可覆盖成员进行显式注释(称之为open)和覆盖:


open class Base {
    open fun v() {}
    fun nv() {}
}
class Derived() : Base() {
    override fun v() {}
}
Kotlin

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()
} 

运行结果:

儿子的性格性格外向
儿子很乖,说话少!!!!!!!!

猜你喜欢

转载自blog.csdn.net/dpl12/article/details/79973096