如果您进行类默认访问,并将该类中包含的方法标记为public,这意味着什么?换句话说,如果无法公开访问封闭类,如何公开访问方法?
答案 0 :(得分:2)
public
时,通常需要 interface
我们来看一下Object#equals方法的简单例子。
虽然您的主类具有默认范围,但您无法在降低可见性的同时覆盖该方法。
所以你需要:public void equals(.......
答案 1 :(得分:2)
在某些情况下,可能需要保持方法公开,例如,当您的具有默认访问权限的类实现公共接口时。
当您根据接口定义API时,这很有用,并且您的default-access类实现了这些公共接口之一。您的API用户可以通过工厂方法实例化您的默认访问类。
答案 2 :(得分:0)
你的意思是这样的:
package p1;
class C1 {
public void publicMethod() {}
}
在另一个包中:
package p2;
import p1.C1; // not allowed
public class C2 {
C1 c1; // not allowed
void test() {
c1.publicMethod(); // not allowed
}
}
如果是继承,可以使用publicMethod
:
package p1;
public class C2 extends C1 {}
现在publicMethod
可以访问:
package p2;
import p1.C2; // C2 is public, ok !
public class C3 {
C2 c2; // C2 is public, ok !
void test() {
c2.publicMethod(); // C2 is public, use publicMethod of C1 !
}
}
因此,减少class
可见性对于不应直接在包外使用的abtract类有用。