java試題

題目

     下列程序會輸出什麼結果:(E)

 
class Super {
  public int getLength() {
return 4;
}
}
 
public class Sub extends Super { 
public long getLength() {
return 5;
}
 
public static void main (String[]args) {
Super super = new Super (); 
Super sub = new Sub(); 
System.out.printIn(super.getLength()+ “,” + sub.getLength() };
}
}
A. 4, 4
B. 4, 5
C. 5, 4
D. 5, 5
E. 代碼不能被編譯

運行結果:

The return type is incompatible with Super.getLength()

分析:

這個問題就是考察方法重寫(override)

方法重寫的規則總結爲:

  • “兩同”方法名相同,形參列表相同(即方法簽名相同)
  • “兩小”子類方法返回值類型應比父類方法返回值類型更小或相等,子類方法聲明拋出的異常類應比父類方法聲明拋出的異常類更小或相等
  • “一大”子類方法的訪問權限應比父類方法的訪問權限更大或相等

注意:

  • 覆蓋方法和被覆蓋方法要麼都是類方法,要麼都是實例方法。

  • 子類重寫的方法,如果返回值爲類類型,其返回值類型必須與父類返回值類型相同或爲父類返回值類型的子類。

這裏如果返回值類型改成 包裝類型的話,有兩點不滿足:

  • 首先父類的是Integer  子類是 Long  很明顯 Long要比Integer 要大
  • Integer 和 Long 不存在繼承關係 ,也就沒有了父類子類之說

 

參考資料:

重寫的基本概念和條件

僅當返回值爲類類型時,重寫的方法纔可以修改返回值類型,且必須是父類方法返回值的子類​​​​​​​

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章