Kotlin笔记36——open、final和abstract修饰符

本文深入探讨了Kotlin中的类与方法修饰符,包括open、final和abstract的作用及如何解决脆弱的基类问题。通过具体示例,讲解了如何在Kotlin中创建可重写或不可重写的方法,以及抽象类的声明方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java中,我们可以创建任意类的子类并重写任意方法,除非显式地的使用final关键字进行标注。但是我们修改基类的方法会导致子类方法报错,这就是脆弱的基类问题。因为子类是继承父类的,所以我们可以根据业务需求改变子类,但是不能改变父类。

Java的类和方法默认是open的,而Kotlin中默认都是final的。

声明一个带open方法的open类

引用《Kotlin实战》当中的例子。

// 这个类是open的:其他可以继承它
open class RichButton : Clickable {

   // 这个函数是final的:不能在子类中重写它
    fun disable(){}

    // 这个函数是open的:可以在子类当中重写
    open fun animate(){}

    // 这个函数重写了一个open函数并且它本身同样是open
    override fun click() {}
}

interface Clickable {
    fun click()
}

上面的例子我们可以知道,如果我们重写了一个基类或者接口的成员,重写了的成员同样是open的。如果你不想让子类重写你的实现,可以在显式的将重写的函数标注未final

open class RichButton : Clickable{
   // 在这里的“final”并没有被删减是因为没有“final”的“override”是open的
   final override fun click() {}

}

abstract关键字声明抽象类

Kotlin声明抽象类的关键字和Java一样也是abstract关键字。代码举例

// 抽象类:不能创建它的实例
abstract class Animated{
    // 这个函数是抽象函数,没有实现必须在子类当中重写
    abstract fun animate()

    // 抽象类中的非抽象函数并不是默认open的,但是可以标准open
    open fun stopAnimating(){}

    fun animateTwice(){}
}
类访问修饰符的意义
修饰符相关作用标注
final不能被重写类中成员默认使用
open可以被重写需要显式标明
abstract必须被重写只能在抽象类使用:抽象成员不能实现
override重写父类或者接口中的成员如果没有使用final表明,重写成员默认是open的

学习收获

这里知道了脆弱的基类问题,学习到Koltin中的open、final和abstract修饰符以及它们的作用。我们可以利用修饰符解决脆弱的基类问题

希望我的博客对学习Kotlin开发的小伙伴有帮助。推广一下我微信公众号,我会经常更新一下技术干货或者开发踩坑历程,欢迎大家关注我!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值