未能覆盖默认方法

时间:2015-09-14 16:34:44

标签: java methods override

我基本上试图覆盖默认的valueOf(Object obj)。那么为什么这仍然是默认方法而不是被覆盖的方法?

class Method {

    public static String valueOf(Object obj) {

      return "hey!!";

    }



    public static void main(String[] args)
    {
        Method m1 = new Method();
        System.out.println(m1);

    }

}

o / p:Method @ 1de3f2d 为什么我得到这个输出?为什么在没有我在重写方法体中定义它的情况下调用obj.toString()方法?

2 个答案:

答案 0 :(得分:0)

对象不是一个接口,它只是一个类。除非您覆盖它们,否则它将使用默认实现。这样你总是知道toString将返回一个字符串(即使你没有具体实现它)。

现在,valueOf没有被调用,因为你从不尝试调用它?

class Method {

@Override
public static String toString() {

  return "hey!!";

}



public static void main(String[] args)
{
    Method m1 = new Method();
    System.out.println(m1);

}
}

应打印“嘿”。

编辑:不赞成:我想我看到了你的问题。您正在考虑使用Strings toString方法,该方法非常正确地调用valueOf方法来确定要打印的内容。但由于Method不扩展String

我不知道为什么你认为它会调用方法的价值。它将改为使用对象toString method。其中使用类名和哈希码来生成字符串。

答案 1 :(得分:0)

您没有覆盖toString方法,而是尝试覆盖valueOf方法。根据{{​​3}},Object中的哪个方法不是。{/ p>

这样做。

@Override
public String toString() {
return "Hey!";
}

而不是你的valueOf方法。