2011-07-05 14 views
8

我想設計A類實現接口C並降低方法(用C語言聲明)的可見性以使其從外部世界變得安全,使得在類中實現的接口中的方法之一A爲私人(降低A級的知名度)。爲安全起見,我必須這樣做,我該怎麼做,是否有解決方法。我們知道,默認情況下,界面有公共成員。但是我沒有選擇,有人可以幫助我。提前致謝。降低在Java中實現接口時的可視性

- 因此,沒有辦法,從接口有一個類的實現方法,並使其私有。所有實現任何接口方法的類都會有公共方法?

回答

13

不,您不能減少界面中方法的可見性。你會希望發生,如果有人這樣寫道:

C foo = new A(); 
foo.methodDeclaredPrivateInA(); 

?就編譯器而言,參考C實現的所有內容都有權調用其中的任何方法 - 這就是Liskov的替代原則的全部內容。

如果你不想實現整個公共接口,不要實現它 - 或者如果你絕對必須拋出異常。

也值得注意的是,源代碼中提供的可訪問性很少是一個好的安全度量。如果您的課程正在虛擬機中運行,而該虛擬機又可以確定自己的權限,則任何人都可以通過反射使成員可見。

+0

那麼,有沒有辦法,有一類從接口實現方法,並使其私人。所有實現任何接口方法的類都會有公共方法? –

+0

@ user357349:是的。這就是它設計的方式。 –

2

您無法減少Java中接口方法的可見性。投擲java.lang.UnsupportedOperationException實施該方法是否可以接受?

0

不能降低可視性,因爲你可以寫沿

C newC = new A(); 
0

這種方式爲我工作線的東西。任何加入到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 
    } 

}