Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么类对象的所有方法都是wait、notify和notify?_Java_Oop_Single Responsibility Principle - Fatal编程技术网

Java 为什么类对象的所有方法都是wait、notify和notify?

Java 为什么类对象的所有方法都是wait、notify和notify?,java,oop,single-responsibility-principle,Java,Oop,Single Responsibility Principle,这些方法属于java.lang.Object有什么原因吗 由于这些方法是在java.lang.Object中声明的,所以每个类都将继承它们。 这意味着String、ArrayList等类也将拥有它们 这不违背单一责任原则吗? 重要通知:我不是在问: 为什么这些方法不是线程的一部分 为什么每个对象都可以锁定 方法被继承的事实并不违反单一责任原则。如果可以重写这些方法,则可能会违反SRP。但是它们不能,它们被声明为最终的 在单一责任原则(SRP)的背景下,我们定义 成为“改变的理由”的责任。如

这些方法属于java.lang.Object有什么原因吗

由于这些方法是在java.lang.Object中声明的,所以每个类都将继承它们。
这意味着String、ArrayList等类也将拥有它们

这不违背单一责任原则吗?

重要通知:我不是在问:

  • 为什么这些方法不是线程的一部分
  • 为什么每个对象都可以锁定

方法被继承的事实并不违反单一责任原则。如果可以重写这些方法,则可能会违反SRP。但是它们不能,它们被声明为
最终的

在单一责任原则(SRP)的背景下,我们定义 成为“改变的理由”的责任。如果你能想到更多 改变一个阶级的动机不止一个,那么这个阶级就不止一个 一个责任

管理的责任落在拥有实现的
对象
类上。该责任与
对象
或其任何子类型中定义的任何其他责任之间不存在耦合。如果需要更改
wait
的行为,则只需更改
对象
(可能还有任何调用站点),而不需要更改
字符串
,不需要更改
列表
,也不需要更改任何其他内容


您可能会认为
对象
类本身没有很强的内聚性,并试图做太多的事情:克隆、比较对象是否相等、生成
字符串
表示等等。然后,您可能会反驳说,这些事情都没有相互耦合,所以这不是问题。

你为什么这么认为?@SotiriosDelimanolis我不认为字符串、列表等是线程锁定的原因。它们不是<代码>对象
为。这些都是
final
方法。@SotiriosDelimanolis被继承,所以它们是所有类的一部分。我认为根本问题是:为什么可以在任何对象上同步?既然你可以在上面同步,你可能还想等待它。。。但是我没有答案(我也没有答案为什么
hashCode
Object
中,而不是在一些
Hashable
接口中)。