1.override 覆寫(重寫)
重寫發生在子類繼承父類時,覆寫(重新實現)父類中的方法。
重寫方法的引數列表必須完全與被重寫的方法相同,否則不能稱為重寫而是過載。
重寫方法的訪問修飾符一定要大於被重寫方法的訪問修飾符(public
>protected
>default
>private
)。
重寫的方法的返回值必須和被重寫的方法的返回值一致。
重寫的方法所丟擲的異常必須和被重寫方法所丟擲的異常一致,或是其子類異常。
被重寫的方法不能為private
,否則在其子類中只是新定義了乙個方法,不構成重寫。
下面看看覆寫的栗子
//父類
public
class overrideparent
}
//子類
public
class
overridechild
extends
overrideparent
public
static
void
main(string args)
}
輸出結果
bird can't fly, plane can fly
通過這個栗子我們可以看到:
overrideparent 和 overridechild都有乙個共同的方法fly。
fly的返回值和引數形式都一樣,只是方法體不一樣。
子類的fly方法前有乙個@overwrite
的註解,jdk1.5出現的,僅用於類的繼承,1.6可用於介面實現。這個註解有助於編譯器檢查,不加也可以的。
2.overload 過載
過載一般是用於乙個類內實現若干過載的方法,方法名相同而引數形式不同。
在使用過載時只能通過相同的方法名,不同的引數形式實現。不同的引數形式可以是不同的引數型別、不同的引數個數、不同的引數順序(引數型別必須不一樣)。
不能通過訪問許可權、返回型別、丟擲的異常進行過載。
方法的異常型別和數目不會對過載造成影響。
下面再來看看過載的栗子
public
class overloadparent //1
public string getmyinfo(int age) //2
public string getmyinfo(string name, int age) //3
public
void
getmyinfo(string name) /4
}
注意觀察
overloadparent中有四個方法名相同的方法。
前三個方法方法名相同,引數形式不同,構成過載。
方法4和方法1僅僅返回值不同,不構成過載,並且編譯器不通過。返回值是方法執行後的結果,不能通過不同的返回來來實現過載。
過載:當方法功能相似,但需要傳遞不同的引數。
覆寫:子類有自己特有的行為,從父類繼承而不能滿足自身需要時。
ps:過載和覆寫都是多型的表現。前者是編譯器多型,後者是執行期多型。
參考文章:
Java中過載與覆寫的區別
區別過載 overload 覆寫 override 1概念 方法名稱相同,引數的型別及個數不同 方法名稱,引數型別,返回值型別和個數完全相同2範圍 乙個類繼承關係3限制 沒有許可權要求 被覆寫的方法不能擁有比父類更為嚴格的訪問控制許可權 而且為了設計的良好,在過載時請保持方法返回型別一致。關於覆寫的...
Java覆寫詳解
覆寫 如果子類定義了與父類相同的屬性或方法,這個操作就稱為覆寫 方法的覆寫 子類定義了與父類方法名稱,引數型別,及個數完全相同的方法,但是覆寫不能有比父類更嚴格的訪問控制許可權 觀察簡單覆寫 package testoverride author weiwei description 簡單的覆寫 c...
java中方法的過載與覆寫的區別
方法覆寫時從private變為default不算是方法覆寫 方法覆寫名字相同,返回值型別相同,引數個數不同 也可以相同 在繼承的關係中也存在著方法覆寫的概念,子類定義了與父類中同名的方法,但是方法覆寫時必須考慮到許可權,即被子類覆寫的方法不能擁有比父類方法更加嚴格的訪問許可權。privatevoid...