JAVA GA(2)

第5題

題目:
11. class A{String write(){return "Nothing";}}
12.class B extends A{String write(){return "Chinese";}}
13.class C extends A{String write(){return "English";}}
14.public class Z {
15. public static void main(String[] args) {
16. A a=new B();
17. C c=(C) a;
18. System.out.println(a.write()+" "+c.write());
19. }
20.}

下列何者為結果?

(A) Nothing English
(B) Chinese English
(C) 執行錯誤
(D) 編譯錯誤

你的答案: B

正確答案: C

錯誤

[詳解]
多型:
編譯會過,因為編譯只知a是A的物件,所以是可以強制轉型為C。
執行時,a是會參照到B的物件,但B與C之間無繼承關係,所以會造成
執行錯誤。



第10題

題目:
11. class ClassA{} 
12. class ClassB extends ClassA{} 
13. class ClassC extends ClassA{} 

and: 

21. ClassA p0 = new ClassA(); 
22. ClassB p1 = new ClassB(); 
23. ClassC p2 = new ClassC(); 
24. ClassA p3 = new ClassB(); 
25. ClassA p4 = new ClassC(); 

Which one is valid?  
(A) p0 = p1; 
(B) p1 = p2, 
(C) p2 = p4; 
(D) p2 = (ClassC)p1;

你的答案: D

正確答案: A

錯誤

[詳解] 
(B) 因為p1是屬於ClassB,p2是屬於ClassC,所以p2不能assign給p1 
(C)  p2是屬於ClassC,p4 類別 ClassA,ClassC為ClassA的子類別,所以在 assign 時要轉型, p2 = (ClassC)p4,否則compiler 不會過  
(D) p1是屬於ClassB,p2是屬於ClassC,但p1不能轉型為ClassC 

posted on 2016-12-20 20:35  xcshehe  阅读(154)  评论(0编辑  收藏  举报

导航