java方法重寫(重點(diǎn)講),方法重載問題
一、方法重載
定義:一個(gè)類中,出現(xiàn)多個(gè)方法的名稱相同,但是它們的形參列表是不同的,那么這些方法就稱為方法重載了。
注意:一個(gè)類中,只要一些方法的名稱相同、形參列表不同,那么它們就是方法重載了,其它的都不管(如:修飾符,返回值類型是否一樣都無所謂)。
形參列表不同指的是:形參的個(gè)數(shù)、類型、順序不同,不關(guān)心形參的名稱。
應(yīng)用場(chǎng)景:開發(fā)中我們經(jīng)常需要為處理一類業(yè)務(wù),提供多種解決方案,此時(shí)用方法重載來設(shè)計(jì)是很專業(yè)的
二、方法重寫
定義:當(dāng)子類覺得父類中的某個(gè)方法不好用,或者無法滿足自己的需求時(shí),子類可以重寫一個(gè)方法名稱、參數(shù)列表一樣的方法,去覆蓋父類的這個(gè)方法,這就是方法重寫。
注意:重寫后,方法的訪問,Java會(huì)遵循就近原則。
上面代碼說明方法重寫了,是一個(gè)案例,小伙伴們可以看一下,多在繼承中使用。
一些方法重寫的注意事項(xiàng):
重寫小技巧:使用Override注解,他可以指定java編譯器,檢查我們方法重寫的格式是否正確,代碼可讀性也會(huì)更好(人家一眼就知道這個(gè)方法是重寫的)。
子類重寫父類方法時(shí),訪問權(quán)限必須大于或者等于父類該方法的權(quán)限( public > protected>缺省)。
(圖上的字有點(diǎn)問題,應(yīng)該是大于等于A類的原方法)
重寫的方法返回值類型,必須與被重寫方法的返回值類型一樣,或者范圍更小。
私有方法、靜態(tài)方法不能被重寫,如果重寫會(huì)報(bào)錯(cuò)的。
注意事項(xiàng)這么多哈哈哈,那就把原來的方法的聲明不變(參數(shù),返回值,方法名稱啥的),就改變里面的方法內(nèi)容 。即“聲明不變,內(nèi)容重寫”。
應(yīng)用場(chǎng)景:當(dāng)子類覺得父類的方法不好用,或者不滿足自己的需求時(shí),就可以用方法重寫。
例子:子類重寫Object類的toString()方法,以便返回對(duì)象的內(nèi)容。
我們直接輸出對(duì)象,其實(shí)默認(rèn)會(huì)調(diào)object類的toString方法,然后返回該對(duì)象的地址,但是我們拿著這個(gè)地址也沒用,所以會(huì)重寫這個(gè)toString方法來讓其返回該對(duì)象的內(nèi)容,才是我們一般所需要的。
(注:object類是默認(rèn)繼承的,重寫的方法是就近調(diào)的,所以會(huì)調(diào)用重寫的toString方法)
例子:
寫了一個(gè)Student類,定義了name,age兩個(gè)成員變量,以及有參無參構(gòu)造器,還有兩個(gè)成員變量的getter,setter方法,齊活?。ㄟ@些是標(biāo)配),然后重寫了toString方法,讓其按照想要展示格式輸出變量的值,而不是地址。
重寫toString方法可以自己寫,idea也有快捷方式,右鍵,選擇Generate,選擇toString(),選擇想要重寫(展示)的變量,點(diǎn)擊ok即可。
步驟如下圖所示,最后一張是編譯器寫好的toString方法。
在Test方法中創(chuàng)建對(duì)象,并賦值,并輸出,看是否調(diào)用了重寫的toString方法。結(jié)果輸出顯示是調(diào)用成功了。
以下附上兩個(gè)類的代碼:
Test.java
public class Test { public static void main(String[] args) { // 創(chuàng)建一個(gè)Student對(duì)象,直接輸出它 Student student= new Student(); student.setName("張三"); student.setAge(19); System.out.println(student); } }
Student.java
public class Student { private String name; private int age; //無參,有參構(gòu)造器 public Student() { } public Student(String name, int age) { this.name = name; this.age = age; } //getter,setter方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } // 重寫object類的toString方法 @Override public String toString(){ return "Student{"+ "name:"+name+",age:"+age+"}"; } }
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java實(shí)現(xiàn)PDF在線預(yù)覽功能(四種方式)
這篇文章主要介紹了Java實(shí)現(xiàn)PDF在線預(yù)覽功能的四種方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10SpringBoot、Java 使用 Jsoup 解析 HTML 頁面
這篇文章主要介紹了SpringBoot、Java 使用 Jsoup 解析 HTML 頁面的詳細(xì)步驟,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08springboot 集成cas5.3 實(shí)現(xiàn)sso單點(diǎn)登錄詳細(xì)流程
SSO的定義是在多個(gè)應(yīng)用系統(tǒng)中,用戶只需要登錄一次就可以訪問所有相互信任的應(yīng)用系統(tǒng)。單點(diǎn)登錄是目前比較流行的企業(yè)業(yè)務(wù)整合的解決方案之一,本文給大家介紹springboot 集成cas5.3 實(shí)現(xiàn)sso單點(diǎn)登錄功能,感興趣的朋友一起看看吧2021-10-10Spring?JPA的實(shí)體屬性類型轉(zhuǎn)換器并反序列化工具類詳解
這篇文章主要介紹了Spring?JPA的實(shí)體屬性類型轉(zhuǎn)換器并反序列化工具類詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02