Java 为什么类对象的所有方法都是wait、notify和notify?
这些方法属于java.lang.Object有什么原因吗 由于这些方法是在java.lang.Object中声明的,所以每个类都将继承它们。Java 为什么类对象的所有方法都是wait、notify和notify?,java,oop,single-responsibility-principle,Java,Oop,Single Responsibility Principle,这些方法属于java.lang.Object有什么原因吗 由于这些方法是在java.lang.Object中声明的,所以每个类都将继承它们。 这意味着String、ArrayList等类也将拥有它们 这不违背单一责任原则吗? 重要通知:我不是在问: 为什么这些方法不是线程的一部分 为什么每个对象都可以锁定 方法被继承的事实并不违反单一责任原则。如果可以重写这些方法,则可能会违反SRP。但是它们不能,它们被声明为最终的 在单一责任原则(SRP)的背景下,我们定义 成为“改变的理由”的责任。如
这意味着String、ArrayList等类也将拥有它们 这不违背单一责任原则吗? 重要通知:我不是在问:
- 为什么这些方法不是线程的一部分
- 为什么每个对象都可以锁定
方法被继承的事实并不违反单一责任原则。如果可以重写这些方法,则可能会违反SRP。但是它们不能,它们被声明为
最终的
在单一责任原则(SRP)的背景下,我们定义
成为“改变的理由”的责任。如果你能想到更多
改变一个阶级的动机不止一个,那么这个阶级就不止一个
一个责任
管理的责任落在拥有实现的对象
类上。该责任与对象
或其任何子类型中定义的任何其他责任之间不存在耦合。如果需要更改wait
的行为,则只需更改对象
(可能还有任何调用站点),而不需要更改字符串
,不需要更改列表
,也不需要更改任何其他内容
您可能会认为对象
类本身没有很强的内聚性,并试图做太多的事情:克隆、比较对象是否相等、生成字符串
表示等等。然后,您可能会反驳说,这些事情都没有相互耦合,所以这不是问题。你为什么这么认为?@SotiriosDelimanolis我不认为字符串、列表等是线程锁定的原因。它们不是<代码>对象
为。这些都是final
方法。@SotiriosDelimanolis被继承,所以它们是所有类的一部分。我认为根本问题是:为什么可以在任何对象上同步?既然你可以在上面同步,你可能还想等待它。。。但是我没有答案(我也没有答案为什么hashCode
在Object
中,而不是在一些Hashable
接口中)。