Kotlin可见修饰符

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修饰的成员

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值