原创

Kotlin的隐藏和封装

封装是面向对象的三大特征之一(另外两个特征是继承和多态)。

封装是面向对象编程语言对客观世界的模拟。对一个类或对象实现良好的封装,可以实现以下目的:

  • 隐藏类的实现细节;
  • 让使用者只能通过事先预定的方法来访问数据,从而可以在该方法里加入控制逻辑,限制对属性的不合理访问。
  • 可进行数据检查,从而有利于保证对象信息的完整性。
  • 便于修改,提高代码的可维护性。

为了实现良好的封装,需要从两个方面考虑:

  • 将对象的属性和实现细节隐藏起来,不允许外部直接访问。
  • 把方法暴露出来,让方法来控制对这些属性进行安全的访问和操作。

封装实际上有两方面的含义:把该隐藏的隐藏起来,把该暴露的暴露出来

封装需要通过使用包和访问权限修饰符来实现。

一、包和导包

如果希望把函数、类放在指定的包结构下,应该在Kotlin源程序的第一个非注释行放置如下格式的代码:

package  packagename

位于包中的类,在文件系统中也必须有与包名层次相同的目录结构。

Kotlin的包需要两个方面的保证:

  1. 在源程序中使用package语句指定包名;
  2. 必须将class文件放在对应的路径下。

Kotlin的import语法和Java类似,支持精确导入和通配符导入。

精确导入:

import  test.Bar

通配符导入:

import foo.*

Kotlin的import不仅可以导入类,还可以导入如下内容:

  • 顶层函数及属性
  • 在对象声明中声明的函数和属性
  • 枚举常量

Kotlin的import语句支持as关键字,可以为导入类指定别名。

二、Kotlin的默认导入

Kotlin默认会导入如下包:

  • kotlin.*
  • kotlin.annotation.*
  • kotlin.collections.*
  • kotlin.comparisons.*
  • kotlin.io.*
  • kotlin.ranges.*
  • kotlin.sequences.*
  • kotlin.text.*

对于JVM平台,还会自动导入如下两个包:

  • java.lang.*
  • kotlin.jvm.*

对于JavaScript平台,则额外导入如下包:

  • kotlin.js.*

三、使用访问控制符

Kotlin提供了4个访问控制符:private、internal、protected和public,分别代表4个访问控制级别:

  • private:private成员只能在该类的内部或文件的内部被访问。
  • internal:internal成员可以在该类的内部或文件的内部或者同一个模块内被访问。
  • protected:protected成员可以在该类的内部或文件的内部或者其子类中被访问。
  • public:public成员可以在任意地方被访问。

如果Kotlin没有显式指定修饰符的话,默认的访问控制修饰符是public。

3.1、Kotlin的访问控制修饰符与Java的区别有如下几点

  • Kotlin取消了Java的默认访问权限,引入了internal访问控制符(模块访问权限)。
  • Kotlin取消了protected的包访问权限。
  • Kotlin的默认访问控制符是public。

模块是编译在一起的一套Kotlin文件,模块的存在形式如下:

  • 一个IntelliJ IDEA模块
  • 一个Maven项目
  • 一个Gradle源集
  • 一次的Ant任务执行所编译的一套文件

3.2、Kotlin不同作用域中的成员可支持的访问控制符。

1、位于包内的顶层成员 位于包内的顶层成员,只能使用private、internal和public其中之一,不能使用protected修饰符。

  • 使用private修饰,这些顶层成员只能在当前文件中被访问。
  • 使用internal修饰,这些顶层成员只能在当前文件或当前模块中被访问。
  • 不加修饰符或使用public修饰,这些顶层成员可以在任意地方被访问。

2、位于类、接口之内的成员 对于位于类、接口之内的成员,能使用private、internal、protected和public其中之一。

  • 使用private修饰,这些成员只能在该类中被访问。
  • 使用internal修饰,这些成员能在该类或当前模块中被访问。
  • 使用protected修饰,这些成员在该类或该类的子类中被访问。
  • 不加修饰符或使用public修饰,这些承压UN可以在任意地方被访问。

类的主构造器在类头部分声明。如果需要为主构造器指定访问权限修饰符,则一定要使用constructor关键字,并在该关键字前面添加private、internal、protected和public其中之一。

主构造器默认的访问权限修饰符是public。

局部声明的作用域仅在该方法内有效,使用访问控制符没有任何意义,所以不能使用private、internal、protected、public修饰符。

学海无涯苦作舟

我的微信公众号.jpg

基本语法
  • 作者:HunterArley (联系作者)
  • 发表时间:2019-11-26 09:51
  • 版权声明:本网站部分内容转载于合作站点或其他站点,但都会注明作/译者和原出处。如有不妥之处,敬请指出。
  • 公众号转载:请在文末添加作者公众号二维码