1. 程式人生 > >java方法的過載與覆蓋的返回值型別

java方法的過載與覆蓋的返回值型別

首先看一段程式:

package testOverLoadandoverRide;


public class A extends B{
//下面的是方法的覆蓋(overRiding)
public void riding(){
System.out.println("this is  overRiding ");
}
//下面兩個函式是方法的過載(overLoading),但是返回值型別不同,可以執行
public String loading(int x){
System.out.println("this is overLoading return String");
return null;
}
public int loading(int x,int y){
System.out.println("this is overLoading return int");
return 0;
}
public static void main(String[] args) {
A a = new A();
a.riding();
a.loading(2);
a.loading(2,3);
}
}


class B{
public void riding(){
System.out.println("this is B");
}
}

下面是執行結果:

this is  overRiding 
this is overLoading return String
this is overLoading return int

有以上程式可以知道,方法的過載是可以改變返回值型別的,但是尚不能說明方法的覆蓋是否可以改變返回值型別,現在修改A類中 riding()方法的返回值型別為int,

public int riding(){
System.out.println("this is  overRiding ");
}

此時會有如下的錯誤:


由此可知,方法的覆蓋是不允許修改返回值型別的。

以上測試程式執行在JDK1.5版本。

我對此的解釋為:

方法的過載是根據函式的引數列表來決定的,即:引數列表的個數,型別,順序三個方面;

對於其返回值型別,就是改變了也不會有影響,因為你不可能寫成引數類表相同(個數,型別,順序)的方法過載,因為那根不就不是過載。所以返回值型別也就不能作為程式執行時選擇函式的一個標準,因此返回值型別也就沒了對函式選擇時的影響。

方法的覆蓋不僅根據函式的引數列表還要根據返回值型別,因為覆蓋的方法的標誌必須要和被覆蓋的方法的標誌完全匹配,才能達到覆蓋的效果;

覆蓋時還有“型別的提升”這一點,具體可以參考

總結如下:

方法覆蓋必須滿足下列條件

(1) 子類的方法的名稱及引數必須和所覆蓋的方法相同

(2) 子類的方法返回型別必須和所覆蓋的方法相同

過載方法必須滿足下列條件

(1) 方法名必須相同

(2) 方法的引數簽名必須相同

(3) 方法的返回型別和方法的修飾符可以不相同