Kotlin可见性修饰符

Java为我们提供了public、protected、private以及default四个可见性修饰符,用来指定类、方法及属性的可见性。Kotlin中的可见性修饰符与Java中的很类似,但也有不一样的地方,主要有以下几点:

  • Kotlin与Java的默认修饰符不同,Kotlin中是public,而Java中是default;
  • Kotlin中有一个独特的修饰符internal;
  • Kotlin可以在一个文件内单独声明方法及常量,同样支持可见性修饰符;
  • Java中除了内部类可以用private修饰以外,其他类都不允许private修饰,而Kotlin可以;
  • Kotlin和Java中的protected的访问范围不同,Java中是包、类及子类可访问,而Kotlin只允许类及子类。

默认修饰符

很多时候,我们在实现类或者方法的时候都会省略它的修饰符。当然,在Java中我们很自然地会给类加上public修饰符,因为大多数类都可能需要在全局访问。而Java的默认修饰符是default,它只允许包内访问。虽然通常IDE会自动帮我们加上public修饰符,但是这也让人觉得它是一个多余的声明。所以,出于简洁性的考虑,Kotlin将默认可见修饰符指定为了public。

前面我们说到了Java中默认修饰符是default,它的作用域是包内可访问。那么Kotlin中有类似的修饰符吗?

Kotlin中的作用域

Kotlin中的作用域可以被称作模块内访问。那么什么是模块呢?模块可以看作一起编译的Kotlin文件组成的集合。那么,Kotlin中为什么要定义这种新的作用域呢?难道Java提供的包内访问作用域不香吗?Java的包内访问作用域确实存在一些问题。举个例子:假如我们在Java项目中定义了一个类,使用了默认修饰符,那么这个类是包内可见,其他外部类将无法访问它。接下来我们把这个项目打包成一个类库,并提供给其他的项目使用。这时候,如果开发者想访问之前定义的这个类,除了复制源代码之外,还有一个方式。就是在程序中创建一个包,它的名字与该类所在的包的名字一致。通过这种方式,就可以直接访问我们前面定义的类了。换句话说,我们之前定义的类就被泄露了,这很有可能导致问题。示例代码如下:

package com.dripower

/** 第三方类库代码 */
class TestDefault {
   
  ...
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值