我想設計A類實現接口C並降低方法(用C語言聲明)的可見性以使其從外部世界變得安全,使得在類中實現的接口中的方法之一A爲私人(降低A級的知名度)。爲安全起見,我必須這樣做,我該怎麼做,是否有解決方法。我們知道,默認情況下,界面有公共成員。但是我沒有選擇,有人可以幫助我。提前致謝。降低在Java中實現接口時的可視性
- 因此,沒有辦法,從接口有一個類的實現方法,並使其私有。所有實現任何接口方法的類都會有公共方法?
我想設計A類實現接口C並降低方法(用C語言聲明)的可見性以使其從外部世界變得安全,使得在類中實現的接口中的方法之一A爲私人(降低A級的知名度)。爲安全起見,我必須這樣做,我該怎麼做,是否有解決方法。我們知道,默認情況下,界面有公共成員。但是我沒有選擇,有人可以幫助我。提前致謝。降低在Java中實現接口時的可視性
- 因此,沒有辦法,從接口有一個類的實現方法,並使其私有。所有實現任何接口方法的類都會有公共方法?
不,您不能減少界面中方法的可見性。你會希望發生,如果有人這樣寫道:
C foo = new A();
foo.methodDeclaredPrivateInA();
?就編譯器而言,參考C
實現的所有內容都有權調用其中的任何方法 - 這就是Liskov的替代原則的全部內容。
如果你不想實現整個公共接口,不要實現它 - 或者如果你絕對必須拋出異常。
也值得注意的是,源代碼中提供的可訪問性很少是一個好的安全度量。如果您的課程正在虛擬機中運行,而該虛擬機又可以確定自己的權限,則任何人都可以通過反射使成員可見。
您無法減少Java中接口方法的可見性。投擲java.lang.UnsupportedOperationException
實施該方法是否可以接受?
不能降低可視性,因爲你可以寫沿
C newC = new A();
這種方式爲我工作線的東西。任何加入到PrivateInterface新功能將打破仍然打破PublicSampleClass
private interface PrivateInterface {
void fooBar();
}
public class PublicSampleClass {
private final listenerInterface = new PrivateInterface {
public void fooBar() {
PublicSampleClass.this.fooBar();
}
};
protected void fooBar() {
// Non public implementation
}
}
那麼,有沒有辦法,有一類從接口實現方法,並使其私人。所有實現任何接口方法的類都會有公共方法? –
@ user357349:是的。這就是它設計的方式。 –