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

运行结果:

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值