2014-09-11 22 views
-1

Person是基類。 Doctor類延伸PersonJava:Ref的類型或new()決定哪些方法可見

現在假設diagnose()是屬於Doctor類的方法。

Person p = New Person(); 
Doctor q = (Doctor)p; 
q.diagnose(); 

爲什麼會拋出錯誤?

q是種類Doctor的對象編號。類的所有對象共享方法的相同副本,因此diagnose()應可用於q

有沒有可用於p不會在Doctor可用的方法領域。 爲什麼java不會允許這個?

+0

我知道這只是一個錯字,但您應該修復代碼中的問題。例如,你說「診斷」是一種方法,但它不像一個寫。 – BitNinja 2014-09-11 01:20:11

+0

你的標題是無法理解的。 – EJP 2014-09-11 01:21:23

回答

0

因爲醫生是一個人,通過繼承,但一個人不是醫生。

3

爲什麼會拋出錯誤?

因爲您正在將Person類型的對象投射到Doctorp的值是對Person的實例的引用,而不是對Doctor的實例的引用,因此投射失敗。

如果您有:

Person p = new Doctor(); 
Doctor d = (Doctor) p; 
d.diagnose(); 

然後這將是罰款。

這不是什麼可見的問題 - d.diagnose()可見每當dDoctor類型的變量,因爲它是在這裏。在調用diagnose()之前,這是執行時間在之間投射的問題。

相關問題