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