2015-09-07 54 views
0

我想要在調用類中的方法被觸發時訪問調用類的方法。以下是我想要做的例子。正在創建類C實例的類是隨機調用的。所以當listerners方法被觸發調用類的接口方法應該能聽的是什麼tigger.Thats我想要做調用類的訪問方法

Interface myinterface 
{ 
    public void interfacemethod(); 
} 

class A implements myinterface 
{ 
    C instance = new C(); 

    public void interfacemethod() 
} 

class B implements myinterface 
{  
    C instance = new C(); 
    public void interfacemethod() 
} 

Class C extends someListerner 
{ 
    public void listenercalled() 
    { 
     //here i want to call the callers interfacemethod() 
    } 
} 
+1

請回答之前的問題-ve標記和如果標記-ve請告訴我的原因 –

+0

我很好奇這個真實世界的用例。 –

+0

你只是想調用超類方法嗎?如果是這樣,你不能只''super.interfacemethod()'? –

回答

0

您需要將指針傳遞給調用者的對象。

如果您要調用C的創建者的Myinterface對象,請在C構造函數中傳遞Myinterface指針。

C instance = new C(this);

將指針存儲在C類中並將其用於回調。 Java函數默認爲「虛擬」。這意味着,無論是否投射,最低的子類函數都會被調用(我認爲這就是你想要的)。

Interface Myinterface{ 
    public void interfacemethod(); 
} 

class A implements Myinterface 
{ 
    C instance = new C ((Myinterface)this); 

    public void interfacemethod() 
} 

class B implements Myinterface 
{  
    C instance = new C ((Myinterface)this); 
    public void interfacemethod() 
} 

Class C extends someListerner 
{ 
    Myinterface ml; 
    public C(Myinterface arg_ml){ 
     ml = arg_ml; 
    } 
    public void listenercalled() 
    { 
     ml.interfacemethod(); 
     //here i want to call the callers interfacemethod() 
    } 
} 
+0

可以請你舉例來說,通過編寫代碼讓我更好地理解 –

+0

Java默認使用虛函數,因此,即使將其作爲My Interface,也會調用相應的A或B接口,如果我瞭解您。 – SirTripalot

+0

我可以嘗試,我是新來的堆棧溢出,所以格式化很棘手​​。 – SirTripalot