2013-07-28 46 views
1

設計這個情況下,我想要做這樣的事情:如何OOM

我有什麼:

  1. A(通用類),可能是空的。

  2. 類別A的具體實施方式:A1,A2,A2

現在有一個驅動程序在那裏我有一個通用的方法:

Class Driver() 
doSomething(A a) 
    { 
     a.setVal1(); 
     a.setVal2(); 
     ..... 
     etc. 
    } 
main() 
{ 
    A a; 
    if(user_input == "a1") 
     a= new A1() 
     //Intention is, I should be able to access all the variables and methods of A1 & A(if any) 
    else if(user_input == "a2") 
     a= new A2() 
     //Intention is, I should be able to access all the variables and methods of A2 & A(if any) 
    doSomething(a); 
} 

}

現在,這裏a可以a= new A1a= new A2(在運行時決定)。

我該如何在Java中實現這一點?

注:類a1(或a2)可以有它自己的變量(和/或方法)&我不想把它們放在A類。

任何指針/幫助將不勝感激。

+0

你想'方法doSomething'是不可知的,其實現它傳遞的一個實例?如果是這樣,它如何能夠使用子類特定的方法和字段? –

+0

您將問題標記爲'java',但沒有有效的Java代碼。請至少嘗試編寫有效的代碼。 – 2013-07-28 19:49:51

+0

@Tichodroma:嗨..我很抱歉,我添加了標籤,因爲我正在尋找JAVA語言的實現,我一定會在下一次照顧。謝謝。 –

回答

1

請記住,當你聲明爲doSomething(A a)一個方法的簽名,你將能夠使用參考a來調用A定義或將其從方法的那些(如果訪問)。

這是可能的,但是,明確a一個的對象是調用特定於該子類中的方法之前。在這種情況下,instanceof的使用是推薦

例如:

doSomething(A a) { 
    if (a instanceof A1) { 
     A1 a1 = (A1) a; 
     a1.methodSpecificToA1(); 
    } else if (a instanceof A2) { 
     A2 a2 = (A2) a; 
     a2.methodSpecificToA2(); 
    } 
} 
+0

謝謝Nishant!這有幫助... –

+1

@RajvidyaChandele您可以標記此答案爲接受然後。 –

+0

一般來說,鑄造是一種代碼味道。如果有一種方法可以實現你的目標而不需要這樣做,那麼使用多態調用來改變共享界面,那會更好。如果沒有,那麼鑄造肯定有效。如果您更多地告訴我們您要實現的目標,我們可能會找到更好的解決方案。 –