深入了解Java方法的重載與重寫
1.方法的重載
1.1.基本介紹
在同一個(gè)類中,允許多個(gè)重名方法的存在,但要求形參列表不一致。
比如:
System.out.println(11)//輸出整數(shù)
System.out.println("Javayyds")//輸出字符串
System.out.println("1.1")//輸出浮點(diǎn)型
1.2.重載的好處
減輕了對(duì)方法起名和記名的麻煩。
1.3.重載使用細(xì)節(jié)
方法名:必須相同
參數(shù)列表:必須不同(參數(shù)的類型、參數(shù)的個(gè)數(shù)、參數(shù)的順序至少有一個(gè)不相同,參數(shù)名無要求)
返回類型:無要求
public int calculate(int a,int b){}
public int calculate(int num1,int num2){}//不構(gòu)成重寫,參數(shù)名不影響參數(shù)列表
public double calculate(int a,int b){}//不構(gòu)成重寫,返回類型無要求
1.4.可變參數(shù)
使用可變參數(shù)可以將一個(gè)類中多個(gè)相同名相同功能但不同參數(shù)的方法封裝成一個(gè)方法。
public int calculate(int a,int b){
return a + b;
}//求兩數(shù)和
public int calculate(int a,int b,int c){
return a + b + c;
}//求三個(gè)數(shù)的和
public int calculate(int a,int b,int c,int d){
return a + b + c + d;
}//求四個(gè)數(shù)的和
使用可變參數(shù)優(yōu)化:
public calculate(int...sums){//表示接受多個(gè)int類型的參數(shù)
int sum = 0;
for(int i = 0;i < sums.length;i ++){//使用時(shí)可以把sums當(dāng)作一個(gè)數(shù)組
sum += sums[i];
}
return sum;
}可變參數(shù)細(xì)節(jié):
- 可變參數(shù)的"..."是固定的不能改變
- 可變參數(shù)的實(shí)參有0個(gè)到多個(gè)
- 可變參數(shù)的實(shí)參可以是數(shù)組
- 可變參數(shù)的本質(zhì)就是數(shù)組
- 可變參數(shù)和普通類型的參數(shù)可以在一起使用,但是必須保證可變參數(shù)在最后
- 一個(gè)形參列表中只能出現(xiàn)一個(gè)可變參數(shù)
public int sum(int...sums,int b){}//錯(cuò)誤,可變參數(shù)必須在最后
public int sum(int a,int...sums,String...s)//錯(cuò)誤,一個(gè)形參列表只能有一個(gè)可變參數(shù)
2.方法的重寫
2.1.基本介紹
子類中有一個(gè)方法和父類的一個(gè)方法返回類型、方法名、參數(shù)列表都相同,則構(gòu)成重寫;
2.2.重寫的好處
重寫可以提高代碼的復(fù)用性
重寫使子類可以在不修改父類方法的情況下,進(jìn)行方法的修改與功能的拓展
2.3.重寫的細(xì)節(jié)
子類方法的方法名、參數(shù)列表必須與父類的完全一致。
子類方法的返回類型必須和父類的返回類型一樣,或者是父類返回類型的子類。
class Animal{
public object m(){};
}
class cat extends Animal{
publci String m(){};//構(gòu)成重寫,String是objec的子類
}子類方法不能縮小父類方法的訪問權(quán)限
class Animal{
public void m(){};
}
class cat extends Animal{
protected void m(){};//錯(cuò)誤,訪問權(quán)限 protected < public
}重寫方法不能拋出新的檢查異常或者比被重寫方法申明更加寬泛的檢查型異常
重寫后可以通過super關(guān)鍵字調(diào)用原方法
public class test {
public static void main(String[] args) {
Cat cat = new Cat();
cat.m();
}
}
class Animal {
public void m() {
System.out.println("這是父類的方法~");
}
}
class Cat extends Animal {
@Override
public void m() {
super.m();//用super關(guān)鍵字調(diào)用父類中的方法
}
}
構(gòu)造方法不能被重寫
構(gòu)造方法要求方法名與類名一致,而方法重寫則要求方法名相同,所以子類無法重寫父類的構(gòu)造方法
3.重寫與重寫的對(duì)比
| 名稱 | 范圍 | 方法名 | 形參列表 | 返回類型 | 訪問修飾符 |
|---|---|---|---|---|---|
| 重載 | 本類 | 必須相同 | 必須不同 | 無要求 | 無要求 |
| 重寫 | 父子類 | 必須相同 | 必須相同 | 重寫方法的返回類型必須和父類相同或是其子類 | 子類不能縮小訪問權(quán)限 |
重寫與重載的區(qū)別主要在于形參列表
重寫規(guī)則可以記住口訣:兩同兩小一大(方法名和參數(shù)相同、子類返回類型和拋出異常小于等于父類、子類訪問權(quán)限大于等于父類)
到此這篇關(guān)于深入了解Java方法的重載與重寫的文章就介紹到這了,更多相關(guān)Java方法重載 重寫內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java 對(duì)ArrayList進(jìn)行分頁(yè)實(shí)例代碼
這篇文章主要介紹了java 對(duì)ArrayList進(jìn)行分頁(yè)實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-02-02
對(duì)dbunit進(jìn)行mybatis DAO層Excel單元測(cè)試(必看篇)
下面小編就為大家?guī)硪黄獙?duì)dbunit進(jìn)行mybatis DAO層Excel單元測(cè)試(必看篇)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05
解決java main函數(shù)中的args數(shù)組傳值問題
這篇文章主要介紹了解決java main函數(shù)中的args數(shù)組傳值問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-02-02
IDEA報(bào)錯(cuò)之前言中不允許有內(nèi)容問題及解決
當(dāng)使用IntelliJ IDEA時(shí),可能會(huì)遇到報(bào)錯(cuò)信息“前言中不允許有內(nèi)容”,這通常是由于XML文件是以帶有BOM頭的UTF-8格式保存的,導(dǎo)致IDE的解析出錯(cuò),解決辦法是在IDEA中調(diào)整文件編碼設(shè)置為無BOM的UTF-8,然后用文本編輯器(如Notepad++)2024-10-10
Springboot?JPA如何使用distinct返回對(duì)象
這篇文章主要介紹了Springboot?JPA如何使用distinct返回對(duì)象,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02

