我刚开始读一本Java书籍,并感到奇怪;如果未指定,则哪个访问说明符是默认的?
默认可见性被称为“ package-private”(尽管您不能显式使用它,这意味着可以从该类所属的同一包内部访问该字段。
如mdma所指出的,但对于接口成员而言并非如此,其默认值为“ public”。
Java 8
默认说明符取决于上下文。
对于类和接口声明,默认为包私有。这介于受保护和私有之间,仅允许访问同一程序包中的类。 (受保护就是这样,但也允许访问包外部的子类。)
class MyClass // package private
{
int field; // package private field
void calc() { // package private method
}
}
对于接口成员(字段和方法),默认访问权限为public。但是请注意,接口声明本身默认为私有包。
interface MyInterface // package private
{
int field1; // static final public
void method1(); // public abstract
}
如果我们有声明的话
public interface MyInterface2 extends MyInterface
{
}
然后,使用MyInterface2的类可以从超级接口查看field1和method1,因为它们是公共的,即使它们看不到MyInterface本身的声明。
如果没有给出访问说明符,则是对类和类成员的包级访问(对此没有明确的说明符)。接口方法是隐式公共的。
默认可见性(无关键字)为package,这意味着它可用于同一包中的每个类。
有趣的旁注是,[[protected不仅将可见性限于子类,而且还限制了同一包中的其他类]]
default
package