修饰符

private

private修饰符是我们使用的最限制的修饰符。它表示它只能被自己所在的文件可见。所以如果我们给一个类声明为private,我们就不能在定义这个类之外的文件中使用它。

另一方面,如果我们在一个类里面使用了private修饰符,那访问权限就被限制在这个类里面了。甚至是继承这个类的子类也不能使用它。

所以一等公民,类、对象、接口……(也就是包成员)如果被定义为private,那么它们只会对被定义所在的文件可见。如果被定义在了类或者接口中,那它们只对这个类或者接口可见。

protected

这个修饰符只能被用在类或者接口中的成员上。一个包成员不能被定义为protected。定义在一个成员中,就与Java中的方式一样了:它可以被成员自己和继承它的成员可见(比如,类和它的子类)。

internal

如果是一个定义为internal的包成员的话,对所在的整个module可见。如果它是一个其它领域的成员,它就需要依赖那个领域的可见性了。比如,如果我们写了一个private类,那么它的internal修饰的函数的可见性就会限制与它所在的这个类的可见性。

我们可以访问同一个module中的internal修饰的类,但是不能访问其它module的。

什么是module

根据Jetbrains的定义,一个module应该是一个单独的功能性的单位,它应该是可以被单独编译、运行、测试、debug的。根据我们项目不同的模块,可以在Android Studio中创建不同的module。在Eclipse中,这些module可以认为是在一个workspace中的不同的project

public

你应该可以才想到,这是最没有限制的修饰符。这是默认的修饰符,成员在任何地方被修饰为public,很明显它只限制于它的领域。一个定义为public的成员被包含在一个private修饰的类中,这个成员在这个类以外也是不可见的。