Kotlin实战指南十八:open、internal 关键字使用

本文介绍了Kotlin中的`open`和`internal`关键字。`open`关键字用于允许类和方法被继承和重写,而`internal`则限制了类和方法的可见性,确保它们只能在同一个模块内使用。通过示例展示了如何在不同模块间调用`internal`方法时会遇到的错误,强调了这两个关键字在Kotlin中控制继承和可见性的重要性。
摘要由CSDN通过智能技术生成

转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/117365712
本文出自【赵彦军的博客】

往期精彩文章

Kotlin实战指南十七:JvmField、JvmStatic使用
Kotlin实战指南十六:Synchronized、Volatile
Kotlin实战指南十五:协程泄漏

open关键字

java中允许创建任意的子类并重写方法任意的方法,除非显示的使用了final关键字进行标注。

而在kotlin的世界里面则不是这样,在 kotlin 中它所有的类默认都是final的,那么就意味着不能被继承,而且在类中所有的方法也是默认是final 的,那么就是 kotlin 的方法默认也不能被重写。那么想在 kotlin 中继承父类应该怎么做呢?

  • 为类增加open,class就可以被继承了
open class Person{
    
} 
  • 为方法增加open,那么方法就可以被重写了
open class Person{
    open fun eat(food: String) {
        
    }

}

open class Man:Person(){
    override fun eat(food: String) {
        super.eat(food)
        
    }
}

internal关键字

internal 修饰类的方法,表示这个类方法只适合当前module使用,如果其他module使用的话,会找不到这个internal方法或者报错。下面我们在moduleA创建一个类 Apple ,里面有两个输出的方法。

class Apple() {
      fun appleLog(){
            Log.i("debug=","appleLog")
        }
       internal fun appleInternalLog(){
            Log.i("debug=","appleInternalLog")
        }

}

然后在 moduleB 创建 kt 类,调用 Apple 的方法,发现只有appleLog方法可以调用,而appleInternalLog 方法则是不显示。

Apple().appleLog()

再来,我们在 moduleB 创建 java 类,调用 Apple 的方法 ,

void text(){
    new Apple().appleInternalLog$production_sources_for_module_arms();//报错,usage of kotlin internal declaration from different module
    new Apple().appleLog(); //正常。
}

总结

所以 internal限制了跨 module 的方法的使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值