方法toString()
的API规范page for the Object class声明:
"建议所有子类都覆盖此方法。"
因此,我希望在Java类库中的许多类中看到@Override
注释。我看了,它并没有出现在课堂上Class'也不是班级'字符串'。
这是我检查的唯一两个,但假设JCL中的所有类都是这种情况,为什么他们不使用@Override
注释?
是出于性能原因吗?
是因为这些类是在@Override
被引入之前编写的吗?
我的印象是,@Override
使用LinkedList<LinkedList<Integer>>
是good programming practice。
答案 0 :(得分:2)
如果您了解使用@Override
的原因,可以理解这一点。问题是它只为子类维护者提供了好处。
主要用法如下:库A有一个类SecurityManager
,其方法为allowed
。 Bob在他的项目中使用了A,他扩展了SecurityManager
,并在他的代码中覆盖了allowed
。但是allowed
仅由SecurityManager
的内部逻辑使用,因此Bob从不在其代码中调用它,但他依赖该库将使用他的实现而不是基本。然后,该库的维护者创建了一个新的主要版本,并进行了一些重大更改 - 并将该方法重命名为isAllowed
。 Bob下载了新版本,编译器对他说'@Override
没有覆盖任何东西 - 重新检查你的代码&#34;,并且Bob看到该方法的名称已更改,并修复了该问题。
然而,java是向后兼容的,因此期望在某个时间点删除或重命名toString
是没有意义的。这就是为@Override
方法添加Object
毫无意义的原因。