private
修饰符是我们使用的最限制的修饰符。它表示它只能被自己所在的文件可见。所以如果我们给一个类声明为private
,我们就不能在定义这个类之外的文件中使用它。
另一方面,如果我们在一个类里面使用了private
修饰符,那访问权限就被限制在这个类里面了。甚至是继承这个类的子类也不能使用它。
所以一等公民,类、对象、接口……(也就是包成员)如果被定义为private
,那么它们只会对被定义所在的文件可见。如果被定义在了类或者接口中,那它们只对这个类或者接口可见。
这个修饰符只能被用在类或者接口中的成员上。一个包成员不能被定义为protected
。定义在一个成员中,就与Java中的方式一样了:它可以被成员自己和继承它的成员可见(比如,类和它的子类)。
如果是一个定义为internal
的包成员的话,对所在的整个module
可见。如果它是一个其它领域的成员,它就需要依赖那个领域的可见性了。比如,如果我们写了一个private
类,那么它的internal
修饰的函数的可见性就会限制与它所在的这个类的可见性。
我们可以访问同一个module
中的internal
修饰的类,但是不能访问其它module
的。
什么是
module
根据Jetbrains的定义,一个
module
应该是一个单独的功能性的单位,它应该是可以被单独编译、运行、测试、debug的。根据我们项目不同的模块,可以在Android Studio中创建不同的module
。在Eclipse中,这些module
可以认为是在一个workspace
中的不同的project
。
你应该可以才想到,这是最没有限制的修饰符。这是默认的修饰符,成员在任何地方被修饰为public
,很明显它只限制于它的领域。一个定义为public
的成员被包含在一个private
修饰的类中,这个成员在这个类以外也是不可见的。