转载请标明出处: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
的方法的使用