SCJP 1.6版考題 051

出自 陳富國維基館
於 2013年3月30日 (六) 07:21 由 Ikk (對話 | 貢獻) 所做的修訂 (新頁面: 1. public interface A{ 2. public void doSomething(String thing); 3. } 1. public class AImpl implements A{ 2. public void doSomething(String msg){} 3. } 1. public class B{ 2...)
(差異) ←上個修訂 | 最新修訂 (差異) | 下個修訂→ (差異)
前往: 導覽搜尋
1. public interface A{
2.   public void doSomething(String thing);
3. }
1. public class AImpl implements A{
2.   public void doSomething(String msg){}
3. }
1. public class B{
2.   public A doit(){
3.     //more code here
4.   }
5.
6.   public String execute(){
7.     //more code here
8.   }
9. }
  
1. public class C extends B{
2.   public AImpl doit(){
3.     //more code here
4.   }
5.
6.   public Object execute(){
7.     //more code here
8.   }
9. }
 

Which statement is true about the classes and interfaces?
  A. Compilation will succeed for all classes and interfaces.
  B. Compilation of class C will fail because of an error in line 2.
  C. Compilation of class C will fail because of an error in line 6.
  D. Compilation of class AImpl will fail because of an error in line 2.

解答


Ans: C

解說:

Overriding 規則:方法名、參數、回傳皆要和父類別中的方法一樣,此例類別C中的execute方法其傳回值是Object,
與父類別B中的execute中的傳回值String不同,類別C中的execute允許傳回非String類別物件,
因為以最大的Object限定傳回值型態,而Object是所有類別的父類別,也就是說類別C的execute有可能傳回非String類別型態,違背覆載的規則。 

String is an Object. 但Object未必一定是String…