2014-05-12 36 views
2

考慮下面的類:如何調用名稱與另一個函數相同的私有類中的函數?

class Foo 
{ 
    private class Bar 
    { 
     int operatedNumber; 
     Bar(int x, int y) 
     { 
      operatedNumber = operate(x,y); 
     } 
     int operate(int x) 
     { 
      return x*2; 
     } 
    } 
    public int operate(int x, int y) 
    { 
     return x+y; 
    } 
    public Foo() 
    { 
     Bar b = new Bar(3,5); 
    } 
} 

我收到編譯時錯誤The method operate() is not applicable for the arguments (int, int).

有沒有辦法來調用第二operate()功能?

+2

注意,還有其他一些問題與您的代碼,超出了問題,你已經證明。有一個例子*只有*在問題中有問題是有幫助的。 –

+1

@ SJuan76:這真的很重要。 OP想要調用封閉類中的方法。在標題中沒有很好地表達,但身體相當清晰。 –

+0

在你的main中有一些不好的東西,爲了得到一個'Bar'的實例,首先需要一個'Foo'的實例,除此之外你的方法操作是無效的,而且你正在返回一些東西。 – nachokk

回答

8

有沒有辦法調用第二個operate()函數?

是 - 你可以用Foo.this限定它指的Foo封閉實例:

operatedNumber = Foo.this.operate(x,y); 
+0

@jgitter:我知道這不是靜態的。這就是爲什麼它是'Foo.this'而不是'Foo'。 –

+0

是的 - 我已經刪除了我的評論...第一次通過誤讀。雖然這是正確的答案,但這在設計方面還有很多不足之處。我寧願重構這堂課。 – jgitter

相關問題