Kt学习笔记(六)类的继承

一、Kt类如何继承
  • 与Java不同,Kt类的继承需要使用冒号(😃,冒号后面需要调用父类的构造器

  • kt和Java一样,都是单继承 ,只能有一个父类

  • kt默认class是final的 也就是说默认不允许继承,需要显式使用open关键字允许继承class

open class Parent   //需要使用open声明Parent类  才允许其他类继承
{
    protected var mName : String = "Bill"

    fun  getName() : String
    {
        return mName
    }

}

class Child : Parent()  //Child类继承Parent类  现在mName 和getName在Child中都可以访问
{
    fun printName()
    {
        println(mName)
    }

}
二、重写方法
  • 在kt中 方法默认是不可重写的

  • 如果要在子类中重写方法,需要在父类相应的方法前面加open关键字

  • 而且要在子类重写的方法前面加override关键字

open  class Cat
{
    protected  var mName : String = "ACat"

    open fun getName() : String
    {
        return mName
    }

}

open class Tom:Cat()
{
    fun printName()
    {
        println(getName())
    }

    //重写父类的getName方法  如果一个方法前面加了override,那么这个方法可以被重写
    override fun getName(): String {
        return "<" + super.getName()+">"
    }
}
	 Cat().getName()
    // 现在调用的getName方法,实际上,执行的是Tom自身的getName方法
    Tom().getName()

如果一个方法前面加了override,那么这个方法可以被重写

open class Tom:Cat()
{
    fun printName()
    {
        println(getName())
    }

    //重写父类的getName方法  如果一个方法前面加了override,那么这个方法可以被重写
    override fun getName(): String {
        return "<" + super.getName()+">"
    }
}

class BTom : Tom()
{
    //再次重写get Name方法  如果想阻止getName方法被子类重写, 需要在override前面在final
   final override fun getName(): String {
        return "【"+ super.getName()+ "】"
    }
}

如果想阻止getName方法被子类重写, 需要在override前面在final

在这里插入图片描述

三、重写属性
  • 被重写的属性必须使用open声明,子类中重写的属性必须用override声明,

  • 不过val属性可以被重写为var属性 ,但是var属性不可以被重写为val属性

open class Dog
{
    open val name:String = "WangWang"
    get()
    {
        println("获取Dog.name属性")
        return field
    }
}

open class ADog : Dog()
{
    override  var name : String = "Mike"
    get()
    {
        println("获取ADog.name属性")
        return field
    }
    set(value)
    {
        field = name
        println("ADog.name被写入")
    }
}

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值