好的,noob問題。我正在爲SCJP學習,並收到3個關於對象引用錯誤的問題,這些問題似乎都指向了同樣的誤解。只是想確認什麼是正確的洞察力。對了,這裏有幾個問題:投射後目標對象會扮演什麼樣的角色?
-
1.
1. class CodeWalkFour { 2. public static void main(String[] args){ 3. Car c = new Lexus(); 4. System.out.print(c.speedUp(30) + " "); 5. Lexus l = new Lexus(); 6. System.out.print(l.speedUp(30, 40, 50)); 7. } 8. } 9. class Car { 10. private int i=0; 11. int speedUp(int x){ 12. return i; 13. } 14. } 15. class Lexus extends Car { 16. private int j = 1; 17. private int k = 2; 18. int speedUp(int y){ 19. return j; 20. } 21. int speedUp(int... z){ 22. return k; 23. } 24. }
我認爲3號線後,C將是一個汽車,沒有一輛雷克薩斯,所以Car.speedUp方法將被調用,而不是Lexus.speedUp方法。原來,這就是所謂的後者。
-
2.
1. class StudentProb { 2. private int studentId = 0; 3. void setStudentID(int sid) { 4. student_id = sid; 5. System.out.println("Student ID has been set to " + sid); 6. } 7. public static void main(String args[]) { 8. int i = 420; 9. Object ob1; 10. StudentProb st1 = new StudentProb(); 11. ob1 = st1; 12. st1.setStudentID(i); 13. } 14. }
同樣的問題。我認爲第11行會讓st1成爲Object,而不是StudentProb。編譯器如何知道在哪裏可以找到setStudentID?
-
3.
1. LectureHall lh = new LectureHall(); 2. Auditorium a1; 3. Facilities f1; 4. 5. f1 = lh; 6. a1 = f1;
設施是一個接口。 ClassRoom類實現Facilities,Auditorium和LectureHall是ClassRoom的子類。同樣的問題:我認爲在第5行之後,f1和lh都是LectureHall。但f1仍然是設施。那麼在這裏做什麼鑄造?
謝謝大家!
PS:代碼格式化對我來說不起作用。隨意編輯。
練習1:編譯器是否會在問題1的第18行的'Lexus#speedUp()'上接受'@ Override'註釋? – trashgod 2010-09-01 17:08:59