为什么toString()不能是静态方法?

时间:2013-12-16 01:00:42

标签: java class static access-modifiers

天哪,我有一个简单但有问题的问题。 据我所知,static基本上意味着,对于该类的每个单个实例,此方法将是相同的,如果我们更改它,这将改变该类的每个单个实例,它也被称为类方法。好吧,如果我有一个以某种格式实现toString ()方法的类,那么就说:

public String toString() {  
    return "(" + x + "," + y + ")";
}

为什么不能将其设置为静态?由于这种格式对于该类的每个实例都是相同的......?

2 个答案:

答案 0 :(得分:8)

这不仅适用于toString()

Java Language Specification

  

如果静态方法hides是一个实例,那么这是一个编译时错误   方法

由于实例方法toString()是从Object隐式继承的,因此在子类型中将方法toString()声明为static会导致编译时错误。

从面向对象的角度来看,请参阅此问题的其他答案或related个问题。

答案 1 :(得分:5)

因为静态方法无法访问实例字段。此外,toString()java.lang.Object指定,因此您必须拥有一个Object实例才能调用toString()。最后,如果toString()是静态的,那么它必须接受Object的实例(你怎么能在类的n实例上调用toString()?)。