2015-09-13 233 views
2

假設以下Java中的類:繼承和創建對象

TeachingAssistant extends Graduate 

我可以做的GraduateobjectTeachingAssistant使用?實施例

TeachingAssistant TA1 = new TeachingAssistant(); 
Graduate grad1 = new Graduate(); 
grad1 = TA1; //can I do this? 
TA1 = grad1;// can I do this as well? 

還假設 類A延伸B和實現Ç 可以我使B和C的對象A'

+0

您是否嘗試過自己測試一下? – resueman

回答

3

鑑於

class TeachingAssistant extends Graduate{} 
class Graduate{} 

此總結了你可以/不可以做什麼(爲什麼)

TeachingAssistant t = new TeachingAssistant(); //OK 
Graduate g = new Graduate(); //OK 
Graduate gt = new TeachingAssistant(); //OK 
TeachingAssistant tg1= new Graduate(); //Compile error: a Graduate is NOT ALWAYS a TeachingAssistant 
TeachingAssistant tg2= (TeachingAssistant) new Graduate(); //Runtime error: as previous example 
TeachingAssistant tg3= (TeachingAssistant)gt; //OK: gt is an object of type TeachingAssistant 
               //referenced by reference of type Graduate 
0

我認爲這裏存在幾個概念你提到。

組成VS繼承

還假設類A延伸B和實現C可我使 B和C的對象A'

我打算假設C是一個接口,就像你提到的實現它一樣。不,不可能在A中實例化C。可以將A中的對象B聲明爲類屬性,但是這種情況的用例很少見,如果您正在這樣做,您應該重新考慮您的設計解決方案。

上溯造型

grad1 = TA1; //can I do this? 

是的,你可以做到這一點,但正確的語法應爲:

grad1 = (Graduate) TA1; 

溯造型

TA1 = grad1;// can I do this as well? 

你不能做到這一點。這會導致編譯錯誤。