好的,菜鸟问题。我正在为 SCJP 学习,并得到了 3 个关于对象引用转换错误的问题,这些问题似乎都指向了同样的误解。只是想确认正确的洞察力应该是什么。对了,问题如下:
-
1.
1. 类 CodeWalkFour { 2. public static void main(String[] args){ 3. 汽车 c = new Lexus(); 4. System.out.print(c.speedUp(30) + " "); 5. 雷克萨斯 l = 新雷克萨斯 (); 6. System.out.print(l.speedUp(30, 40, 50)); 7.} 8.} 9. 类车{ 10.私有int i=0; 11. int speedUp(int x){ 12. 返回 i; 13.} 14.} 15.类雷克萨斯扩展汽车{ 16.私有int j = 1; 17.私有int k = 2; 18. int speedUp(int y){ 19. 返回 j; 20.} 21. int speedUp(int...z){ 22.返回k; 23.} 24.}
我以为在第 3 行之后,c 会是 Car,而不是 Lexus,所以会调用 Car.speedUp 方法,而不是 Lexus.speedUp 方法。原来是后者被调用。
-
2.
1. 类 StudentProb { 2. private int studentId = 0; 3. 无效 setStudentID(int sid) { 4. student_id = sid; 5. System.out.println("学生ID已设置为" + sid); 6.} 7. public static void main(String args[]) { 8.int i = 420; 9.对象ob1; 10. 学生概率 st1 = 新学生概率(); 11. ob1 = st1; 12. st1.setStudentID(i); 13.} 14.}
同样的问题。我认为第 11 行会使 st1 成为对象,而不是 StudentProb。编译器如何仍然知道在哪里可以找到 setStudentID?
-
3.
1. LectureHall lh = new LectureHall(); 2. 礼堂a1; 3.设施f1; 4. 5. f1 = lh; 6. a1 = f1;
设施是一个接口。ClassRoom 类实现了Facilities,Auditorium 和LectureHall 是ClassRoom 的子类。同样的问题:我认为在第 5 行之后,f1 和 lh 都将是 LectureHall。但 f1 仍然是设施。那么铸造在这里到底做了什么?
谢谢大家!
PS:代码格式对我不起作用。随意编辑。