2017-02-24 37 views
3

比方說,我在自己的項目中,我使用一個名爲com.3rdparty.foo第三方包,該包中有一個包,私人領域的類:是否可以將我自己的課程放入第三方包中?

package com.3rdparty.foo; 

public class Bar { 
    public void someMethod() { ... } 

    int ppField; 
} 

現在我意識到,包私有字段麥凱納應該在該包之外訪問。但是,出於好奇,從技術上可以寫我自己的類,並把它歸功於該第三方軟件包,例如,規避包私有字段保護:

// MyOwnClass.java 

package com.3rdparty.foo; 
import com.3rdparty.foo.Bar; 

public class MyOwnClass { 
    public int hackPPField (Bar b) { return b.ppField; } 
} 

我希望這是技術上不可能。但是,如果確實如此,那麼我想知道封裝封裝的確切機制,它可以防止您任意擴展第三方封裝。

回答

1

是的,在一般情況下完全可能。如果我沒有弄錯,你的課程和包中的其他課程必須由相同的類加載器加載,並且你不能將課程放在某些包中(例如,java.lang;實際上,我認爲它全是java.包),但在一般情況下,沒有什麼區別你的課程與com.3rdparty.foo中的其他課程。

相關問題