Kotlin学习(11):可见性修饰符

1、应用域

类、对象、接口、构造函数、方法、属性和它们的setter都可以有可见性修饰符。在Kotlin中有四个可见性修饰符:

  • private
  • protected
  • internal
  • public

如果没有显式指定修饰符的话,默认可见性都是public。

2、包名

函数、属性和类、对象和接口可以在顶层声明,即直接在包内:

package foo

fun baz(){}
class Bar{}

每一个修饰符都限制了一定的范围:

  • 未指定修饰符时,默认为public,表明随处可见
  • 声明为public时,它只会在声明它的文件内可见;
  • 声明为internal,它会在相同模块内随处可见;
  • protected不适用于顶层声明。

例如:

package foo

//在此类内随处可见
private fun foo(){}

//该属性随处可见
public var bar: Int = 5
    //setter只在此文件内可见
    private set

//相同模块内可见
internal val baz = 6
3、类和接口

对于类内部声明的成员:

  • private意味着只在这个类内部(包含其所有成员)可见;
  • protectedprivate一样+在子类中可见。
  • internal能剪刀类声明的本模块内的任何客户端都可见其internal成员;
  • public能见到类声明的任何客户端都是可见其public成员。
open class Outer {
    private val a = 1
    protected open val b = 2
    internal val c = 3
    val d = 4

    protected open class Nested {
        public val e: Int = 5
    }
}

class Subclass : Outer() {
    //b被open修饰,可以直接访问
    override val b: Int
        get() = 5

    val xx = Outer()
    //修饰符是protected或者private
    private var yy = Outer.Nested()

    fun foo() {
        //c,d,e可见,但是需要通过对应对象
        println(xx.c)
        println(xx.d)
        print(yy.e)
    }
}

class Unrelated(o: Outer) {
    val kk = o
    fun stringPrint() {
        //a,b不可见,c,,d可见
        print(kk.c)
        print(kk.d)
    }
}

要指定一个类的主构造函数的可见性,使用以下语法,需要添加一个显式的constructor关键字:

class C private constructor(a: Int){
    //代码块
}
4、模块

可见性修饰符internal意味着该成员只在相同模块内可见。更具体的说,一个模块是编译在一起的一套Kotlin文件:

  • 一个IntellJ IEDA模块;
  • 一个Maven或者Gradle项目;
  • 一次<kotlinc>Ant任务执行所编译的一套文件。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值