封装是面向对象的三大特征之一(另外两个特征是继承和多态)。
封装是面向对象编程语言对客观世界的模拟。对一个类或对象实现良好的封装,可以实现以下目的:
- 隐藏类的实现细节;
- 让使用者只能通过事先预定的方法来访问数据,从而可以在该方法里加入控制逻辑,限制对属性的不合理访问。
- 可进行数据检查,从而有利于保证对象信息的完整性。
- 便于修改,提高代码的可维护性。
为了实现良好的封装,需要从两个方面考虑:
- 将对象的属性和实现细节隐藏起来,不允许外部直接访问。
- 把方法暴露出来,让方法来控制对这些属性进行安全的访问和操作。
封装实际上有两方面的含义:把该隐藏的隐藏起来,把该暴露的暴露出来。
封装需要通过使用包和访问权限修饰符来实现。
一、包和导包
如果希望把函数、类放在指定的包结构下,应该在Kotlin源程序的第一个非注释行放置如下格式的代码:
package packagename
位于包中的类,在文件系统中也必须有与包名层次相同的目录结构。
Kotlin的包需要两个方面的保证:
- 在源程序中使用package语句指定包名;
- 必须将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源集
- 一次<kotlinc>的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修饰符。
今年年初我花一个月的时间收录整理了一套知识体系,如果有想法深入的系统化的去学习的,可以私信我【安卓】,我会把我收录整理的资料都送给大家,帮助大家更快的进阶。