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() 的用法

为啥 Arrays.toString() 会给出与手动打印数组不同的输出? [关闭]

如何使用 System.out.print(Arrays.toString(a)) [关闭]

深入JDK源码之Arrays类中的排序查找算法(转)

Object类中的toString(),equals(), hashCode()方法之间的关系