2017-04-02 67 views
-3

當我們均衡兩個對象時會發生什麼?例如;均衡兩個不同的對象

Person p = new Person(); 
Student s = new Student(); 
p=s; 

(Person類是學生類的父。)

當我寫p=s,爲什麼我不能做到從對學生的特殊的方法? (像downcasting)我的意思是這個陳述的工作機制是什麼?

+4

你不是「均衡」兩個不同的對象。您將放棄創建的新Person對象,並將p變量的引用重新分配給Student對象的引用。編譯器只知道p是一個Person變量,所以只有Person方法可以直接使用。 Student方法在那裏,只有當你把p賦給Student時:'((Student)p).studentMethod();'纔可用。如果你投錯了,這有危險。 –

+0

只有s的引用指向p〜 – lpgad

回答

1

我假設Person類是Student類的父類。否則你的代碼將無法編譯。

當你調用p=s你存儲Student類實例的引用到p是應該持有一個參考Person對象。

稍後,當您嘗試使用p調用Student類方法時,編譯器會產生一個錯誤,因爲編譯器知道p只包含Person對象。要調用Student方法,你應該使用類型轉換:

((Student)p).someStudentMethod();