Arrays 类中的 .toString() 是如何重载的
Posted
技术标签:
【中文标题】Arrays 类中的 .toString() 是如何重载的【英文标题】:How is the .toString() overloaded in the Arrays class 【发布时间】:2021-09-14 22:36:26 【问题描述】:我遇到了一个方法不能同时被覆盖和重载的概念。但是当我使用 Arrays.toString() 时,
如果我错了,请纠正我,但 toString() 方法已同时被覆盖和重载。这怎么可能?
【问题讨论】:
不,Arrays
没有不带参数的 toString
方法,因此这里没有任何内容被覆盖。
你错了。您可以创建一个覆盖toString()
的类(注意,没有参数)并使用参数重载toString
。
顺便说一句,一般一个方法可以有多个重载版本,每个重载版本也可以是覆盖,或者依次被覆盖;所以我不认为“不能同时被覆盖和重载”是什么意思很清楚。但是 Arrays 方法是静态的,所以覆盖甚至不入画面。
@MCEmperor @user7 谢谢。我明白了。 @khelwood。如果我的问题不清楚,我很抱歉,但我所说的“不能同时被覆盖和重载”的意思是有没有办法覆盖一个方法,然后重载它。例如。我正在覆盖MyClass
类中的 .hashcode() 方法,我现在可以重载它吗?
为什么要重载 hashCode()?使用依赖于具有单个哈希码的任何给定对象。
【参考方案1】:
当您在子类中具有完全相同的方法签名时,您将被覆盖。当您有两个具有不同类型或参数数量的相同命名方法时,您正在重载。您可以覆盖一个方法,然后重载它,但您可以编写一个方法,当您重载它时,您最终会覆盖一个超类方法。一件事不排斥另一件事。
让我们有一个这样的 Super 类:
public class Super
public void testMethod()
// Overload
public void testMethod(String param)
然后用这样的子类扩展它:
public class Sub extends Super
// Override only
@Override
public void testMethod()
// Overload only
public void testMethod(int param)
// Overload and Override
@Override
public void testMethod(String param)
如您所见,您可以通过多种方式仅重载、仅覆盖或两者兼有。如前所述,一件事并不排斥另一件事。
【讨论】:
以上是关于Arrays 类中的 .toString() 是如何重载的的主要内容,如果未能解决你的问题,请参考以下文章
Pattern 类中的 pattern() 与 toString()
为啥 Arrays.toString() 会给出与手动打印数组不同的输出? [关闭]