2017-02-24 25 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中的其他课程。

相关问题