我在课程wait()
中找到方法Object
这是最终的,这意味着不能覆盖这种方法
任何想法,为什么它是最终的?
答案 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()
背后的逻辑应该是所有对象的同义词