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

时间:2014-04-09 21:12:11

标签: java

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

4 个答案:

答案 0 :(得分:7)

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

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

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

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

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

  

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

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

答案 3 :(得分:-1)

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