早在2004年,当我在RIT参加CS课程的介绍时,我的教授非常强调我们记得放入访问修饰语。没有它,默认访问将是公开的,我记得教授说的。也许我的记忆是错的,教授实际上并没有说出来,但显然现在情况并非如此。我想知道在某些时候是否曾经是这种情况,也许Sun在2004年后的某个时候改变了它?
答案 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
之外什么都不是,所以对他们应用访问修饰符不会改变一件事(好吧,如果你尝试private
或protected
你会得到一个编译错误,所以无论你记得教授说什么,它都不适用于接口。
答案 2 :(得分:0)
默认访问说明符是自启动以来的类的包私有。来自Java docs:
如果一个类没有修饰符(默认值,也称为 package-private),它只在自己的包中可见(包 被命名为相关类的组 - 您将在a中了解它们 后一课。)
在会员级别,您也可以使用公共修饰符或否 修饰符(package-private)与顶级类一样,并且与 同样的意思。对于会员,还有两个额外的访问权限 修饰符:私有和受保护。 private修饰符指定了 该成员只能在自己的类中访问。受保护的 修饰符指定只能在自己的成员中访问该成员 package(与package-private一样),另外还有一个子类 它在另一个包中的类。