我对某些文档使用的“私有包”一词以及“默认访问”的使用感到有些困惑。包私有和默认访问不是保护的同义词吗?
default
修饰符放在(interface)方法的前面。但这不是访问修饰符!该表中清楚地显示了所有访问修饰符及其范围。
我对某些文档使用的“私有包”一词以及“默认访问”的使用感到有些困惑。包私有和默认访问不是保护的同义词吗?
default
修饰符放在(interface)方法的前面。但这不是访问修饰符!该表中清楚地显示了所有访问修饰符及其范围。
Answers:
是的,几乎一样。受保护的修饰符指定了构件只能在其自己的封装件内被访问的(与包专用)和,另外,通过其类的另一个包的子类。
public static final
,一种方法是public abstract
,对于一个枚举或注释是public
和一类是public static
“默认”访问修饰符(没有明确给出任何修饰符的访问修饰符)是“ package-private”,这意味着只有同一包中的内容才能访问它们。但是,在同一个包中并不意味着类之间的继承关系,它纯粹是一种命名约定。
“受保护”意味着不仅同一个包中的类,而且子类(无论这些子类位于哪个包中)都将能够访问它。
包私有和默认访问是同义词。一个对象还可以访问其类在同一包中的对象的受保护成员。一个对象也可以访问其超类的受保护成员,而无需对其包进行任何条件。作为一个具体的例子:
package ab;
class A {
protected void foo() {}
void dd(){}
}
class C {
void aa(){
A a = new A();
a.foo(); //legal
a.dd(); //legal
}
}
package sub;
class D extends A{
void ac(){
foo(); //legal ..
dd(); //illegal.. because dd has default access..
}
class E {
void ee(){
A a = new A();
a.foo(); //illegal
a.dd(); //illegal
}
default和package-private都相同,这意味着任何类都可以使用它们,直到它们在同一包中为止。
实际上,“ 包专用”一词用private修饰符的含义来称呼,因为“ 专用”意味着它仅在同一类中可用,并且没有其他类或子类可以在同一包中或没有该包中对其进行访问。
因此,package-private的含义与default相同。