当前位置: 首页 > 知识库问答 >
问题:

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

上官扬
2023-03-14

伙计们,我有一个简单但令人讨厌的问题。据我所知,静态基本上意味着,对于该类的每个实例,这个方法将是相同的,如果我们改变它,这将改变该类的每个实例,它也被称为类方法。那么,如果我有一个类,它实现了某种格式toString()方法,让我们说:

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

为什么不能设置为静态?因为该类的每个实例的格式都是相同的。。。?

共有2个答案

呼延学
2023-03-14

因为静态方法无法访问实例字段。另外,toString()java指定。lang.Object,因此必须有一个要调用toString()的对象实例。最后,如果toString()是静态的,它将必须接受对象的实例(否则如何在类的n个实例上调用toString())。

韦熙云
2023-03-14

这不仅适用于toString()

Java语言规范说

如果静态方法隐藏实例方法,则是编译时错误。

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

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

 类似资料:
  • 问题内容: 在静态上下文中,为什么不能调用的静态版本(而不是必须使用)? 编译器不够聪明,无法确定何时使用对象方法+何时使用静态方法吗? 注意: 我并不是说应该使用a 而不 是非静态方法(这很明显- 如果是的子类,则a的of 可能返回或其他,必须在运行时确定)。 我是说我想知道为什么没有 两个 版本,一个是仅适用于静态上下文的静态方法,另一个是常规的非静态方法。如果不可能,那就不可能了,那就是答案

  • 不允许在接口中使用静态/最终方法的原因到底是什么?

  • 我知道在Java中,静态方法和实例方法一样是继承的,不同的是,当它们被重新声明时,父实现是隐藏的,而不是重写的。好吧,这有道理。但是,Java教程指出 接口中的静态方法从不继承。 然而,

  • 问题内容: 不需要任何代码,只需要某种指导。希望保持我的学术诚信;) 我不断收到那个烦人的错误。我需要为每个Room实例调用toString方法。有什么建议?如果可能的话,我希望在2小时内给出答案。 问题答案: 您不应尝试调用Room类,而应调用Room 对象 。在该方法中,请使用for循环遍历房间数组,并打印通过调用数组中保存的每个Room对象返回的String,因为这是您的方法应做的事情。 例

  • 根据我的理解,如果子例程不作用于类的实例(其作用仅限于显式输入/输出),则它是;如果子例程作用于类的实例,则它是(它可能会对实例产生副作用,使其不纯)。 关于这个话题,这里有一个很好的讨论。请注意,根据接受答案的定义,静态实际上应该是一个函数,因为实例从不隐式传递,而且它不能访问任何实例的成员。 不过,考虑到这一点,静态实际上不应该是函数吗? 我想确保我使用了正确的措辞。 有人能澄清一下吗?

  • 问题内容: 问题是在Java中为什么不能定义抽象静态方法?例如 问题答案: 因为“抽象”的意思是:“不实现任何功能”,而“静态”的意思是:“即使没有对象实例也有功能”。这是一个逻辑上的矛盾。