我有一類名爲Student
和子類,稱爲AthleteStudent
:多態性已經失去了與鑄造
現在,讓我們這些測試用例:
AthleteStudent ats = new AthleteStudent("test", 22, "Karate");
Student std;
std = ats; // upcasting OK
/* ats and std point to the same object, i.e AthleteStudent */
ats.hello(); /* Hello I'm AthleteStudent => polymorphism OK */
std.hello(); /* Hello I'm AthleteStudent => polymorphism OK */
我不明白這裏是這個:
即使std
引用AthleteStudent
我無法訪問方法changeDepartement()
。
std.changeDepartement(); // Doesn't work
只有當我們投這個對象像這樣的工作原理
((AthleteStudent) std).changeDepartement(); // OK
爲什麼我們需要強制std
是一個AthleteStudent
對象知道它是作爲AthleteStudent
物體進行處理?用第一個例子,std.hello()
打印AthleteStudent
執行沒有問題。
簡而言之,您不能在Java中投射對象。但是,您可以使用Java進行參考。 – zee 2015-04-05 16:57:57