Kotlin 继承性和重写的代码练习

关于继承性,Kotlin默认所有类都是final的(无法被继承),加open关键字类可以继承

//Kotlin默认所有类都是final的(无法被继承)
//open 与 final相反
open class Parent(name: String, age: Int){

}
//子类参数传递给父类
class Children(name: String, age: Int):Parent(name,age){

}
//若一个类无primary构造方法,secondary构造方法需要构造初始化super
open class Parent2(name: String){

}
//xx:xx xx继承于xx
class Child2:Parent2{
    //定义secondary构造方法
    constructor(name: String):super(name){

    }
}

方法被重写输出

open class Food{
    open fun name(){
        println("food")
    }
    fun produceDate(){
        println("1958.8.8")
    }
}
class Fish : Food() {
    override fun name() {
        println("fish")
    }
}

open class Egg : Food() {
    //无法被其他子类继承此egg类覆写的方法name()
    final override fun name() {
        println("egg")
    }
}

fun main(args: Array<String>) {
    var fish = Fish()
    fish.name()
    fish.produceDate()
    var egg = Egg()
    egg.name()
}

output:
fish
1958.8.8
egg

方法和属性被重写输出,树和树苗类的继承关系,关于val和var的覆写区别

open class Tree{
    open val name:String ="tree"
}

class Seeding : Tree() {
    override val name:String ="seeding"
}

fun main(args: Array<String>) {
    var seeding =Seeding()
    println(seeding.name)
    println("@@@@@@@@@@")
    val seeding3 = Seeding3()
    seeding3.grow()
    println(seeding3.name)

}

class Seeding2(override val name: String) : Tree() {
}
open class Tree2{
    open fun grow() {
        println("树在生长")
    }
    open val name: String get() ="树"

}

class Seeding3 : Tree2() {
    override fun grow() {
        super.grow()
        println("树苗也在生长")
    }

    override val name: String
        get() = super.name + "和小树苗"

}
//(两者读写权限不同)var(get set方法)属性不能被val(get只读)属性覆写

output:
seeding
@@@@@@@@@@
树在生长
树苗也在生长
树和小树苗
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值