我们知道java.lang
是java中的默认包,我们不需要从中导入任何内容。
java.lang
?java.lang
添加其他默认包吗? java.lang
(我的意思是,如果我
重写从java.lang
到的所有类和接口
java.lang1
,然后我可以将java.lang1
设置为默认值吗?答案 0 :(得分:15)
我确信所有这些都不可能发布,“不,这些都不可能。”注意你不能用反射来做,因为这些都是编译时的问题。
(4),“我可以从Object更改默认基类”,与其他基类不同,并且是最荒谬的。这会在编译时打破许多程序,因为即使像System.out.println(user)
这样的事情也依赖于对象user
具有toString
方法的事实。特别是String
已被破坏,因为其toString
方法是从Object
继承的。
你问的其他所有内容都只是编译时间,所以不那么荒谬,但仍然不可能。
为了完整性,这也是一种奇怪和不好的做法。我听说过一个C程序员,他将#define retrun return
包含在头文件中。因此,当任何其他开发人员维护他的代码时retrun eta;
,他们必须挖掘头文件以了解其含义。这是写优化代码,但软件工程是关于读优化代码(是的,我正在推广;试图在段落中覆盖这一点)。杂乱的进口就是这样做的 - 它告诉事情来自哪里非常模糊,这对String
和Exception
来说很好,但即使java.util
中的事情也有问题。是的,这条线在某些时候是任意的,但我觉得它很聪明,当然不应该包含更多的东西。
答案 1 :(得分:0)
您无法在java中更改java.lang
的默认包。必须使用import
语句导入除此包之外的所有类。所以对于你的1,2 and 3
答案是否定的。
Can I change the base class (java.lang.Object) to some other class ?
答案是没有了(至少不是一个简单的方法,没有搞乱bootclasspath和东西),为什么你想这样做。如果需要,您可以改为说YourClass extends Object
并实现额外的功能并覆盖现有的功能。但即使这样,所有类也不会像Object
那样从你的类中隐式扩展。使用Object
类的推荐方法是覆盖其方法以实现特定于您的类的自己的功能(如覆盖toString()
)。
答案 2 :(得分:0)
是的,你可以。但这种情况非常罕见。
从理论上讲,你可以在运行时轻松地做到这一点。使用Java Agent API替换(换行)默认Object类的字节码。对于需要自定义功能的所有类加载器也要这样做。
注意:
这真的不复杂。它只是另一种API。