0

我正在阅读一些代码,我看到了这个:

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 ();
   }
}

为什么reduce可以调用accum而不用“this”引用手头的对象?这个函数调用的简写版本不是只适用于静态方法吗?如果这可行,如果静态和非静态方法都具有相同的名称,它不会爆炸吗?

4

2 回答 2

2

相反,您不能thisstatic函数中使用。声明函数的目的static是使其独立于对象实例,即this对象。

调用accum (x);本质上与this.accum (x);. this关键字是隐含的。

在Java中,重载(即同名的函数)与函数是否存在无关static

于 2013-09-25T05:07:13.100 回答
0

我假设这是java并基于此回答。

由于 reduce 不是静态方法,这意味着已经创建了一个对象,因此您可以直接在该方法中调用另一个非静态方法。否则,即使使用“this”关键字也无法调用 accum。

对于您的第二个问题,您可能只有一个同名的静态或非静态方法。仅当您具有不同的参数时,才可能重载方法。

于 2013-09-25T05:08:01.983 回答