-3
當我們均衡兩個對象時會發生什麼?例如;均衡兩個不同的對象
Person p = new Person();
Student s = new Student();
p=s;
(Person類是學生類的父。)
當我寫p=s
,爲什麼我不能做到從對學生的特殊的方法? (像downcasting)我的意思是這個陳述的工作機制是什麼?
當我們均衡兩個對象時會發生什麼?例如;均衡兩個不同的對象
Person p = new Person();
Student s = new Student();
p=s;
(Person類是學生類的父。)
當我寫p=s
,爲什麼我不能做到從對學生的特殊的方法? (像downcasting)我的意思是這個陳述的工作機制是什麼?
我假設Person
類是Student
類的父類。否則你的代碼將無法編譯。
當你調用p=s
你存儲Student
類實例的引用到p
是應該持有一個參考Person
對象。
稍後,當您嘗試使用p
調用Student類方法時,編譯器會產生一個錯誤,因爲編譯器知道p只包含Person
對象。要調用Student
方法,你應該使用類型轉換:
((Student)p).someStudentMethod();
你不是「均衡」兩個不同的對象。您將放棄創建的新Person對象,並將p變量的引用重新分配給Student對象的引用。編譯器只知道p是一個Person變量,所以只有Person方法可以直接使用。 Student方法在那裏,只有當你把p賦給Student時:'((Student)p).studentMethod();'纔可用。如果你投錯了,這有危險。 –
只有s的引用指向p〜 – lpgad