繁体   English   中英

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

[英]Why my overriding method of toString() has to be public?

我是Java新手,我正在学习基础知识。 我正在研究toString方法以及如何在我自己的类中覆盖它。 我只是想知道为什么toStringpublic 是因为它是在Object类中定义的吗?

从官方Oracle 文档

修饰符

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

这是因为继承在两个类之间创建了一个IS-A关系, Liskov替换原则必须是有效的。 没有先前可能无法执行的约束。

想想看:你用MyGizmo继承了Gizmo。 这意味着任何可以使用Gizmo的地方,都可以使用MyGizmo。 如果某个程序执行gizmoObject.toString()那么即使gizmoObject不是Gizmo而是MyGizmo,它也应该有效。

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

覆盖任何方法时,覆盖的可见性必须至少与基本方法一样可见。

当你重写任何方法,在覆盖的能见度必须大于基方法的可见性等于以上

覆盖方法时,应将覆盖方法的可见性声明为基类中的可见性或更宽。

这是关于我自己写的最重要规则的说明,作为对我的参考:

/ *访问修饰符* /

1-子级中的访问修饰符应相同或更大(序列:public - protected - default(package-private) - private)。 父级中的访问修饰符不应该是私有的。 如果孩子无法访问父方法,则在没有@Override注释的情况下覆盖该方法会将其视为新方法。

/ *退货类型* /

2-子类中的返回类型应该是同一个类或子类。

/ *例外* /

3-如果父方法抛出了检查异常,那么子方法可以:a-抛出相同的异常或子类。 b-不要抛出任何例外。 c-抛出运行时异常。

4-如果父方法抛出未经检查的异常,则子方法可以:a-不抛出任何异常。 b-抛出运行时异常。

5-如果parnet的方法没有抛出异常,那么子方法可以:a-不抛出任何异常。 b-抛出运行时异常。

因为要覆盖方法,所以必须将其定义为原型方法或更多。

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

更严格的订单:

公共默认保护私人

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM