Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.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/8/linq/3.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/9/git/22.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 为什么我的toString()重写方法必须是公共的?_Java_Object To String - Fatal编程技术网

Java 为什么我的toString()重写方法必须是公共的?

Java 为什么我的toString()重写方法必须是公共的?,java,object-to-string,Java,Object To String,我是Java新手,正在学习基础知识。我正在学习toString方法,以及如何在自己的类中重写它。我只是想知道为什么toString要成为public?是因为在对象中定义了它吗?当您重写任何方法时,重写的可见性必须至少与基本方法一样可见。当重写方法时,您应该将被重写方法的可见性声明为基类或更广泛的类中的可见性 以下是关于我自己编写的最重要规则的注释,作为对我的参考: /*访问修饰符*/ 1-子级中的访问修饰符应相同或更大(顺序: public-protected-默认(包专用)-专用)。通道 父级

我是Java新手,正在学习基础知识。我正在学习
toString
方法,以及如何在自己的类中重写它。我只是想知道为什么
toString
要成为
public
?是因为在
对象中定义了它吗?

当您重写任何方法时,重写的可见性必须至少与基本方法一样可见。

当重写方法时,您应该将被重写方法的可见性声明为基类或更广泛的类中的可见性

以下是关于我自己编写的最重要规则的注释,作为对我的参考:

/*访问修饰符*/

1-子级中的访问修饰符应相同或更大(顺序: public-protected-默认(包专用)-专用)。通道 父级中的修饰符不应是私有的。如果孩子没有访问权限 ,然后重写该方法而不使用 “重写注释”将视为一种新方法。

/*返回类型*/

2-子类中的返回类型应为同一类或子类

/*例外情况*/

3-如果父方法抛出checked异常,则子方法 方法可以:a-抛出相同的异常或子类。b-不要 抛出任何异常。c-抛出运行时异常

4-如果父方法抛出未检查的异常,则子方法 方法can:a-不抛出任何异常。b-throw运行时 例外情况

5-如果parnet的方法没有抛出异常,那么子方法 方法can:a-不抛出任何异常。b-throw运行时 例外情况


重写任何方法时,重写的可见性必须小于等于或大于Oracle官方提供的基本方法的可见性

修饰符

重写方法的访问说明符可以允许比重写方法更多但不更少的访问。例如,超类中受保护的实例方法可以在子类中公开,而不是私有


这是因为继承在两个类之间创建了一个关系,对于这两个类,继承必须是有效的。如果没有以前不可能强制执行的约束。

因为您要覆盖一个方法,您必须将它定义为原型方法或更多。

想想看:您用MyGizmo将Gizmo子类化。这意味着可以在任何可以使用Gizmo的地方使用MyGizmo。如果某个程序确实执行了gizmoObject.toString()
,那么即使gizmoObject不是Gizmo而是MyGizmo,也应该可以执行该操作


特别是,
toString
用于打印和转储对象,需要在所有对象上都可以访问。

重写子类方法时,可见性必须比父类更宽

由宽到严:

公开的 违约 受保护的
private

您始终可以从
toString()
+1中调用private方法,原因与@OliCharlesworth相同。这不仅仅是一条任意规则。-1:除此之外(
toString
必须是
public
受保护的
不行),而且不正确(如果在同一个包中,您可以用另一个不带访问修饰符的方法覆盖使用访问修饰符声明的方法)LSP要求将对象强制转换为基类型使其表现为基类型,因此任何重写方法的对象都必须以符合基类约定的方式执行此操作。然而,这并不意味着该方法一定有用。如果
Woozler
合同规定如果
CanFnorble()
返回false,则不要求
Fnorble()
做任何有用的事情,并且如果sealed class
Moozler
(源自
Woozler
)不能
Fnorble()
,那么最好禁止调用
Fnorble()
在已知为
Moozler
的对象上。