日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java 可以重载等于号码_Java面试之Java基础4——重载与重写的区别

發布時間:2023/12/1 java 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 可以重载等于号码_Java面试之Java基础4——重载与重写的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

重載與重寫的概念

重載與重寫的區別

重載與重寫的總結

構造器是否能被重寫override

為什么函數不能根據返回類型來區分重載

重載與重寫的概念

重載:同樣一個方法可以根據輸入參數列表的不同,做出不同的處理。普通方法和構造器方法都能夠重載。

方法重載:

/**

* 重載方法

*/

public class Print {

public void print(String str) {

System.out.println(str);

}

public void print(Integer i) {

System.out.println(i);

}

public void print(Float f) {

System.out.println(f);

}

public void print(Boolean b) {

System.out.println(b);

}

}

構造器重載

/**

* 重載構造器

*/

public class Print {

Print(String str){

System.out.println(str);

}

Print(Integer i){

System.out.println(i);

}

Print(Float f){

System.out.println(f);

}

public void print(Boolean b) {

System.out.println(b);

}

}

重寫:重寫是要在子類繼承父類的同名方法時,當輸入參數列表一樣時,要做出不同于父類的邏輯功能,就是覆蓋重寫父類方法。注意:重寫的方法上有一個@Override,表示該方法被重寫了。

/**

* 方法重寫

*/

class Father {

public void print(){

System.out.println("Father");

}

public void print(String str){

System.out.println("Father -> "+str);

}

}

class Son extends Father {

// 重寫print()方法

@Override

public void print() {

System.out.println("Son");

}

// 重寫print(String str)方法

@Override

public void print(String str) {

System.out.println("Son -> "+str);

}

}

重載與重寫的區別

重載的注意事項:發生在同一個類中,方法名必須相同。

方法重載與下列因素相關:

1. 參數個數不同

2. 參數類型不同

3. 參數的多類型順序不同

方法重載與下列因素無關:

1. 與參數的名稱無關

2. 與方法的返回值類型無關

下面是錯誤示例:

上面這句話嚴格來說是錯誤的,因為參數個數相同,但可以是類型不同

下面是參數個數相同,參數類型相同,但是順序不同。

參數名稱即使不同,但參數類型、參數列表、參數個數相同,也會報錯

即使返回類型不同,但方法名相同,參數類型、參數列表、參數個數相同,也會報錯

重寫注意事項:發生在運行期,是兩個及以上的類,是子類對父類允許訪問的方法進行重新編寫。方法名、參數列表、參數順序必須相同,子類方法返回值類型比父類方法返回值類型更小或相等。

拋出異常范圍小于等于父類,訪問修飾符范圍大于等于父類。

如果父類方法訪問修飾符為private/final/static,則子類不能重寫該方法,但是被static修飾的方法能夠被再次聲明。

構造方法無法被重寫

重寫的方法上有一個@Override表示該方法被重寫了。

下面是關于重寫特點的代碼解釋。

1、拋出異常范圍小于等于父類

子類拋出異常范圍等于父類拋出異常范圍,不會報錯。

子類拋出異常范圍小于父類拋出異常范圍,不會報錯。

子類拋出異常范圍大于父類拋出異常范圍,會報錯。

2、訪問修飾符范圍大于等于父類

訪問修飾符的范圍:public > protected > private

子類訪問修飾符的范圍大于父類訪問修飾符的范圍,不會報錯

子類訪問修飾符的范圍等于父類訪問修飾符的范圍,不會報錯

子類訪問修飾符的范圍小于父類訪問修飾符的范圍,會報錯

3、如果父類方法訪問修飾符為private/final/static,則子類不能重寫該方法,但是被static修飾的方法能夠被再次聲明。

使用private修飾的無法重寫

使用final修飾的無法重寫

使用static修飾的不能重寫,但能被再次聲明

下面的代碼也不能稱之為重寫:當向上轉型時,調用的還是父類的方法。

class Father {

static void print() {

System.out.println("Father");

}

}

class Son extends Father {

static void print() {

System.out.println("Son");

}

}

public class Demo {

public static void main(String[] args) {

Son.print();

Father son=new Son();

son.print();

}

}

/*

* 打印結果:

* Son

* Father

*/

在Java中,如果父類含有一個靜態方法,且在子類中也含有一個返回類型,方法名、參數列表等都與之相同的的靜態方法,在子類中只是對父類的該同名方法進行隱藏,并不是重寫。父類與子類含有的其實是兩個沒有關系的方法,兩者的行為不具有多態性。

在上面的例子中,print方法與類發生了關聯,但它不在乎什么類型的類正在創建它,而僅在乎引用的類型。在Father son = new Son()中,son是類Son在內存中的一個Father類型的引用,如果一個static修飾的方法被調用了,JVM不會檢查什么類型正在指向它,只會調用與Father類相關聯的方法的實例。

4、?類?法返回值類型應??類?法返回值類型更?或相等

如果?法的返回類型是void和基本數據類型,則返回值重寫時不可修改。但是如果?法的返回值是引?類型,重寫時是可以返回該引?類型的?類的。

class Father {

public String print() {

return "Father";

}

}

class Son extends Father {

@Override

public String print() {

return "Son";

}

public Father father(){

return new Father();

}

}

class SonSon extends Son {

@Override

public String print() {

return "SonSon";

}

@Override

public Father father() {

return new Son();

}

}

重載與重寫的總結

重載重寫概念發生在一個類中。一個方法根據輸入參數列表的不同,做出不同的邏輯處理。普通方法和構造器都能夠重載發生在子類和父類中。子類方法繼承父類的同名方法,重新寫方法的處理邏輯。普通方法能夠重寫,構造器不能夠重寫。

特征普通方法重載方法名相同;構造器重載與類名相同。重寫的方法上有一個@Override注解,表示該方法被重寫了。

相關因素方法重載與參數個數、參數類型、多類型參數的順序的不同相關。(即方法的參數列表要不一樣)方法重寫與參數個數、參數類型、多類型參數的順序的相同相關。(即方法的參數列表要一樣)

不相關因素方法重載與參數的名稱、方法的返回值類型無關。(即重載方法的參數名稱、返回值類型是否一樣不重要)方法重寫的參數名稱可以改變,但返回值類型要小于等于父類方法的返回值類型。

其他可以拋出不同的異常,可以有不同修飾符。子類拋出的異常范圍要小于等于父類,訪問修飾符的范圍要大與等于父類。如果父類方法被private/final/static修飾,那么子類不能重寫該方法。

構造器是否能被重寫override

構造器Constructor 不能被 override(重寫),但是可以 overload(重載),所以你可以看到?個類中有多個構造函數的情況。

構造器可以重載

為什么函數不能根據返回類型來區分重載

為什么不能根據返回類型來區分重載?因為調用時不能指定類型信息,編譯器不知道你要調用哪個函數。

當執行add(1, 2)這個方法時,不需要保存返回值,那么該調用哪個方法呢?這很好不區分吧。

如果需要返回值,比如說float sum = add(1, 2);還好區分些,至少可以根據前面的float推斷出要調用哪個方法。但如果不需要返回值,那么幾乎難以區分。

如果方法的返回值不加以利用,那么返回值將毫無用處,自然無法作為區別的標準。

更多的適合方法的返回值是函數運行后的一個結果,是方法的調用者和被調用者通信的關鍵,并不能作為某個方法的唯一標識。

總結

以上是生活随笔為你收集整理的java 可以重载等于号码_Java面试之Java基础4——重载与重写的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。