为什么我不能在Java中覆盖方法wait()?
我在Object
类中找到方法wait()
。
这是最终的,这意味着不能覆盖此方法。
任何想法为什么它是最终的?
@Flavio–这实际上是一个非常好的问题。
当然, 你无法覆盖它的原因是设计师将其称为“最终”。
这个决定的几个潜在原因:
-
你不希望人们弄乱基础类(类“Object”)上的基本操作的语义。
-
由于它是“最终的”,编译器可以通过内嵌“wait()”来优化性能(节省几个周期)
-
“final”通过防止恶意代码利用“wait()”来增加Java对象模型的安全性。
它不是为了重写而设计的,这就是原因。 方法wait()
调用wait(long timeout)
,这是final
和native
。 因此后者不应该被覆盖,并且无参数版本只是final
版本所以它也不应该被覆盖。
如果您覆盖所有Object
的可用的基本function,那么很可能会破坏您的软件或破坏同事的一天。
如果你查看wait()
的文档:
导致当前线程等待,直到另一个线程调用此对象的notify()方法或notifyAll()方法。
事实certificate它与notify()
和notifyAll()
协同工作,因此您无法在不更改其function的情况下进行更改。 更不用说使用这些方法的数十个并发库。
它有一个相当具体的实现,不需要修改。 wait()
背后的逻辑应该是所有对象的同义词