+ 我要发布
我发布的 我的标签 发现
浏览器扩展
斑点象@Edge

Kotlin可见修饰符_kotlin 模块内可用_天涯无芳草海角无石穿的博客-CSDN博客

Kotlin可见修饰符使用 kotlin可见修饰符和java中的类似,同样使用的是public 、protected、private修饰符,不过在kotlin中默认的是public,在java中默认的修饰符是包私有,在kotlin中只把包当作在命名空间中组织代码的一种方式使用,并没有对其做可见性控制,而是提供了一个新的修饰符,internal来替代。 修饰符 类成员 顶层声明 public 所有地方可见 所有地方可见 internal 模块内可见 模块内可见 protected 子类中可见 不可用 private 类中可见 文件中可见 1.模块内可见Internal kotlin模块是指一组编译在一起的kotlin文件: 一个Intellij IDEA模块 一个Maven或Gradle工程 一组调用Ant编译的文件 在Java中第三方库中包私有的类,可以在项目中建立和包私有的类的包名一样的类,就可以轻松的访问到这个包私有的类。在kotlin中,开发工程和第三访库不属于一个模块,所以用Internal可以解决java中的这个问题。 2.private 在java很少用private来修饰一个类的可见性,一般只会用在内部类,因为java的类不存在属于某个文件,所以用private来修饰非内部类,没有任何意义。在Kotlin中,类可以属于当前的Kotlin文件,所以当用private来修饰类的时候,表示这个类只能在当前文件中可访问。 package com.example.myapplication private class Test01Class{ internal var a = 1 } package com.example.myapplication class Test02Class { //此处提示编译错误 val test01Class = Test01Class() } 3.protected 在Java中protected修饰的内容作用域是包内、类及其子类可以访问,而在Kotlin中没有包作用域,所以protected的作用域只有类及其子类 package com.example.myapplication private open class Test01Class{ protected var a = 1 } class TestClass{ private val test01Class = Test01Class() fun test(){ //此处提示编译错误 test01Class.a } } private class Test01ChildClass: Test01Class() { fun test(){ a=2 } } 从上面例子可以看出变量a只能在子类中可用。并且当Test01Class修改符为private时,子类的修饰也必须为private,并且在TestClass中声明一个test01Class时,修饰符也必须时private。一个通用的规则:类的基础类型和类型参数列表中用到的所有类,或者函数的签名都有与这个类或者函数本身相同的类型。 扩展函数不能访问类中用private和protected修饰的成员