我可以创建一个与预定义包具有相同名称的自己的包
在Java中,例如java.lang
?
如果是这样,结果会是什么?这不是我能够访问该软件包的受保护的成员吗?
如果没有,是什么阻止我这样做?
答案 0 :(得分:7)
否 - java.lang
被禁止。安全管理器不允许java.lang
包中的“自定义”类,也没有办法告诉他接受它们。
你是对的 - 在java.lang
命名空间中声明的自己的类允许你在该包中使用protected
方法和类的成员,这绝对不是必需的。
这编译很好 - 但是 - 尝试执行它;)
package java.lang;
public class EvilAsEvilCanBe {
public static void main(String[] args) {
System.out.println("hehe");
}
}
答案 1 :(得分:3)
禁止任何与“java。*”匹配的包名称,并抛出安全异常。
答案 2 :(得分:2)
有两件事阻止你。
1)许可协议。 “注意:不应该部署使用此选项来覆盖rt.jar中的类的应用程序,因为这样做会违反Java 2 Runtime Environment二进制代码许可证。” http://download.oracle.com/javase/6/docs/technotes/tools/windows/java.html
2)您必须使用-Xbootclasspath:bootclasspath
或添加lib / endorsed目录。
由于JVM中的内部优化,某些类不容易修改,例如您不能向Object / Sun的JVM添加多个方法;)