伙计们,我有一个简单但令人讨厌的问题。据我所知,静态
基本上意味着,对于该类的每个实例,这个方法将是相同的,如果我们改变它,这将改变该类的每个实例,它也被称为类方法。那么,如果我有一个类,它实现了某种格式的toString()
方法,让我们说:
public String toString() {
return "(" + x + "," + y + ")";
}
为什么不能设置为静态?因为该类的每个实例的格式都是相同的。。。?
因为静态方法无法访问实例字段。另外,toString()
由java指定。lang.Object
,因此必须有一个要调用toString()
的对象实例。最后,如果toString()
是静态的,它将必须接受对象的实例(否则如何在类的n个实例上调用toString())。
这不仅适用于toString()
Java语言规范说
如果静态方法隐藏实例方法,则是编译时错误。
由于实例方法toString()
隐式继承自Object
,因此在子类型中将方法toString()
声明为静态
会导致编译时错误。
从面向对象的角度来看,请参阅此问题或相关问题的其他答案。
问题内容: 在静态上下文中,为什么不能调用的静态版本(而不是必须使用)? 编译器不够聪明,无法确定何时使用对象方法+何时使用静态方法吗? 注意: 我并不是说应该使用a 而不 是非静态方法(这很明显- 如果是的子类,则a的of 可能返回或其他,必须在运行时确定)。 我是说我想知道为什么没有 两个 版本,一个是仅适用于静态上下文的静态方法,另一个是常规的非静态方法。如果不可能,那就不可能了,那就是答案
不允许在接口中使用静态/最终方法的原因到底是什么?
我知道在Java中,静态方法和实例方法一样是继承的,不同的是,当它们被重新声明时,父实现是隐藏的,而不是重写的。好吧,这有道理。但是,Java教程指出 接口中的静态方法从不继承。 然而,
问题内容: 不需要任何代码,只需要某种指导。希望保持我的学术诚信;) 我不断收到那个烦人的错误。我需要为每个Room实例调用toString方法。有什么建议?如果可能的话,我希望在2小时内给出答案。 问题答案: 您不应尝试调用Room类,而应调用Room 对象 。在该方法中,请使用for循环遍历房间数组,并打印通过调用数组中保存的每个Room对象返回的String,因为这是您的方法应做的事情。 例
根据我的理解,如果子例程不作用于类的实例(其作用仅限于显式输入/输出),则它是;如果子例程作用于类的实例,则它是(它可能会对实例产生副作用,使其不纯)。 关于这个话题,这里有一个很好的讨论。请注意,根据接受答案的定义,静态实际上应该是一个函数,因为实例从不隐式传递,而且它不能访问任何实例的成员。 不过,考虑到这一点,静态实际上不应该是函数吗? 我想确保我使用了正确的措辞。 有人能澄清一下吗?
问题内容: 问题是在Java中为什么不能定义抽象静态方法?例如 问题答案: 因为“抽象”的意思是:“不实现任何功能”,而“静态”的意思是:“即使没有对象实例也有功能”。这是一个逻辑上的矛盾。