溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

重寫(xiě)、覆蓋、重載、多態(tài)區(qū)別是什么

發(fā)布時(shí)間:2022-02-18 16:29:08 來(lái)源:億速云 閱讀:213 作者:zzz 欄目:開(kāi)發(fā)技術(shù)

今天小編給大家分享一下重寫(xiě)、覆蓋、重載、多態(tài)區(qū)別是什么的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來(lái)了解一下吧。

override->重寫(xiě)(=覆蓋)、overload->重載、polymorphism -> 多態(tài)

override->重寫(xiě)(=覆蓋)

override是重寫(xiě)(覆蓋)了一個(gè)方法,以實(shí)現(xiàn)不同的功能。一般是用于子類在繼承父類時(shí),重寫(xiě)(重新實(shí)現(xiàn))父類中的方法。 

重寫(xiě)(覆蓋)的規(guī)則: 

1、重寫(xiě)方法的參數(shù)列表必須完全與被重寫(xiě)的方法的相同,否則不能稱其為重寫(xiě)而是重載. 

2、重寫(xiě)方法的訪問(wèn)修飾符一定要大于被重寫(xiě)方法的訪問(wèn)修飾符(public>protected>default>private)。 

3、重寫(xiě)的方法的返回值必須和被重寫(xiě)的方法的返回一致;

4、重寫(xiě)的方法所拋出的異常必須和被重寫(xiě)方法的所拋出的異常一致,或者是其子類;

5、被重寫(xiě)的方法不能為private,否則在其子類中只是新定義了一個(gè)方法,并沒(méi)有對(duì)其進(jìn)行重寫(xiě)。

6、靜態(tài)方法不能被重寫(xiě)為非靜態(tài)的方法(會(huì)編譯出錯(cuò))。

重寫(xiě)、覆蓋、重載、多態(tài)區(qū)別是什么
overload->重載

overload是重載,一般是用于在一個(gè)類內(nèi)實(shí)現(xiàn)若干重載的方法,這些方法的名稱相同而參數(shù)形式不同。 

重載的規(guī)則: 

1、在使用重載時(shí)只能通過(guò)相同的方法名、不同的參數(shù)形式實(shí)現(xiàn)。不同的參數(shù)類型可以是不同的參數(shù)類型,不同的參數(shù)個(gè)數(shù),不同的參數(shù)順序(參數(shù)類型必須不一樣); 

2、不能通過(guò)訪問(wèn)權(quán)限、返回類型、拋出的異常進(jìn)行重載; 

3、方法的異常類型和數(shù)目不會(huì)對(duì)重載造成影響;

polymorphism -> 多態(tài)

多態(tài)的概念比較復(fù)雜,有多種意義的多態(tài),一個(gè)有趣但不嚴(yán)謹(jǐn)?shù)恼f(shuō)法是:繼承是子類使用父類的方法,而多態(tài)則是父類使用子類的方法。 一般,我們使用多態(tài)是為了避免在父類里大量重載引起代碼臃腫且難于維護(hù)。

舉個(gè)例子:
public class Shape
{
public static void main(String[] args){
Triangle tri = new Triangle();
System.out.println("Triangle is a type of shape? " + tri.isShape());// 繼承
    Shape shape = new Triangle();
System.out.println("My shape has " + shape.getSides() + " sides."); // 多態(tài)
    Rectangle Rec = new Rectangle();
Shape shape2 = Rec;
System.out.println("My shape has " + shape2.getSides(Rec) + " sides."); //重載
}
public boolean isShape(){return true;
}
public int getSides(){return 0 ;
}
public int getSides(Triangle tri){ //重載return 3 ;
}
public int getSides(Rectangle rec){ //重載return 4 ;
}
}
class Triangle extends Shape
{
public int getSides() { //重寫(xiě),實(shí)現(xiàn)多態(tài)return 3;
}
}
class Rectangle extends Shape
{
public int getSides(int i) { //重載return i;
}
}

以上就是“重寫(xiě)、覆蓋、重載、多態(tài)區(qū)別是什么”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI