Java的默认访问修饰符曾经是公开的

时间:2015-08-28 18:07:27

标签: java access-modifiers

早在2004年,当我在RIT参加CS课程的介绍时,我的教授非常强调我们记得放入访问修饰语。没有它,默认访问将是公开的,我记得教授说的。也许我的记忆是错的,教授实际上并没有说出来,但显然现在情况并非如此。我想知道在某些时候是否曾经是这种情况,也许Sun在2004年后的某个时候改变了它?

3 个答案:

答案 0 :(得分:6)

在类上,默认访问是package-private。在接口上,成员的默认值是public,而接口本身的默认值(如类)是package-private。

自Java发布以来,它没有改变。

答案 1 :(得分:2)

自Java 1.0以来,没有访问修饰符的Java类一直是包私有的。

以下是指向JLS 1.0的适用部分的链接:

  

如果一个类或接口类型被声明为public,那么任何可以访问声明它的包的Java代码都可以访问它。如果类或接口类型未声明为public,则只能从声明它的包中访问它。

对于类型内的成员,它说:

  

引用的成员(字段或方法)(类,接口或数组)   类型或类型的构造函数只有在类型时才可访问   是可访问的,并声明成员或构造函数允许   访问:

     
      
  • 如果成员或构造函数被声明为public,则访问权限为   允许的。接口的所有成员都是隐式公开的。
  •   
  • 否则,如果成员或构造函数被声明为protected,那么   只有在满足以下条件之一时才允许访问:

         
        
    • 从包含受保护成员所在的类的包中发生对成员或构造函数的访问   声明。
    •   
    • 访问发生在声明受保护成员的类的子类中,并且访问权限如上所述   在§6.6.2。
    •   
  •   
  • 否则,如果声明了成员或构造函数   私有,然后只有当它从内部发生时才允许访问   声明它的类。

  •   
  • 否则,我们说有默认值   访问权限,仅在访问权限发生时才允许访问   声明类型的包。
  •   

这意味着如果没有修饰符,则类的成员/构造函数将是包私有的,而不是公共的。

接口的成员除了public之外什么都不是,所以对他们应用访问修饰符不会改变一件事(好吧,如果你尝试privateprotected你会得到一个编译错误,所以无论你记得教授说什么,它都不适用于接口。

答案 2 :(得分:0)

默认访问说明符是自启动以来的类的包私有。来自Java docs

  

如果一个类没有修饰符(默认值,也称为   package-private),它只在自己的包中可见(包   被命名为相关类的组 - 您将在a中了解它们   后一课。)

     

在会员级别,您也可以使用公共修饰符或否   修饰符(package-private)与顶级类一样,并且与   同样的意思。对于会员,还有两个额外的访问权限   修饰符:私有和受保护。 private修饰符指定了   该成员只能在自己的类中访问。受保护的   修饰符指定只能在自己的成员中访问该成员   package(与package-private一样),另外还有一个子类   它在另一个包中的类。