我基本上试图覆盖默认的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()方法?
答案 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方法。