我正在阅读一些代码而且我看到了这个:
abstract class Accum {
/** Return the accumulated result. */
abstract int result();
/** Process and accumulate the value X. */
abstract void accum(int x);
/** Return the result of accumulating all of the values in vals. */
int reduce(int[] vals) {
for (int x : vals)
accum (x);
return result ();
}
}
如果不使用“this”引用手头的对象,reduce如何调用accum?这个函数调用的简写版本是否只适用于静态方法?如果这样可行,如果静态方法和非静态方法具有相同的名称,它会不会爆炸?
答案 0 :(得分:2)
相反,您无法在this
函数中使用static
。声明函数static
的目的是使其独立于对象实例 - 即this
对象。
对accum (x);
的调用本质上与this.accum (x);
相同。隐含this
关键字。
在Java中,重载(即具有相同名称的函数)与函数是否为static
无关。
答案 1 :(得分:0)
我认为这是java并基于此回答。
由于reduce不是静态方法,这意味着已经创建了一个对象,因此您可以在该方法中直接调用另一个非静态方法。否则即使使用“this”关键字也无法调用accum。
对于第二个问题,您可能只有一个同名的静态或非静态方法。只有在您有不同的参数时才可以重载方法。