詳解Java中的覆寫與過載

2021-08-25 16:57:53 字數 1643 閱讀 3940

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...