为什么我不能在Java中覆盖方法wait()?

我在Object类中找到方法wait()
这是最终的,这意味着不能覆盖此方法。
任何想法为什么它是最终的?

@Flavio–这实际上是一个非常好的问题。

当然, 无法覆盖它的原因是设计师将其称为“最终”。

这个决定的几个潜在原因:

  • 你不希望人们弄乱基础类(类“Object”)上的基本操作的语义。

  • 由于它是“最终的”,编译器可以通过内嵌“wait()”来优化性能(节省几个周期)

  • “final”通过防止恶意代码利用“wait()”来增加Java对象模型的安全性。

它不是为了重写而设计的,这就是原因。 方法wait()调用wait(long timeout) ,这是finalnative 。 因此后者不应该被覆盖,并且无参数版本只是final版本所以它也不应该被覆盖。

如果您覆盖所有Object的可用的基本function,那么很可能会破坏您的软件或破坏同事的一天。

如果你查看wait()的文档:

导致当前线程等待,直到另一个线程调用此对象的notify()方法或notifyAll()方法。

事实certificate它与notify()notifyAll()协同工作,因此您无法在不更改其function的情况下进行更改。 更不用说使用这些方法的数十个并发库。

它有一个相当具体的实现,不需要修改。 wait()背后的逻辑应该是所有对象的同义词