2014-04-03 63 views
0

所以在我的編譯器類中,我們看了一下代碼調度和繼承(靜態還是動態類型)

p : Point; 
p <- new ColorPoint; 

這裏p被被宣佈爲一個點,而是被分配一個重點色對象,重點色是Point的子類。

指導員說p有靜態類型Point,但它有動態類型ColorPoint。他說這是因爲編譯器在編譯時並不知道p是一個ColorPoint,它只是在運行時發現它。這是爲什麼?編譯器無法看到p被分配了一個ColorPoint對象嗎?

回答

0

是的,在這種情況下是可以的,但如果你有

p : Point; 
p <- new ColorPoint; 
// some statements that operate on p 
p <- new BlackAndWhitePoint; 
// some more statements that operate on p 

通常情況下,編譯器不能推斷出整個情境變量在哪裏使用,因此它必須由聲明的類型去。