導航:首頁 > 研究方法 > 重寫方法為什麼修飾符要大

重寫方法為什麼修飾符要大

發布時間:2022-08-29 00:17:04

❶ 重載和重寫的區別

1.重寫必須繼承,重載不用。
2.重寫的方法名,參數數目相同,參數類型兼容,重載的方法名相同,參數列表不同。
3.重寫的方法修飾符大於等於父類的方法,重載和修飾符無關。
4.重寫不可以拋出父類沒有拋出的一般異常,可以拋出運行時異常

❷ 面向對象概念中方法重寫和重載的區別

重寫只存在於子類與父類中,重載存在於一個類中。
具體區別如下:
一、重寫(override)
override是重寫(覆蓋)了一個方法,以實現不同的功能。一般是用於子類在繼承父類時,重寫(重新實現)父類中的方法。
重寫(覆蓋)的規則:
1、重寫方法的參數列表必須完全與被重寫的方法的相同,否則不能稱其為重寫而是重載.
2、重寫方法的訪問修飾符一定要大於被重寫方法的訪問修飾符(public>protected>default>private)。
3、重寫的方法的返回值必須和被重寫的方法的返回一致;
4、重寫的方法所拋出的異常必須和被重寫方法的所拋出的異常一致,或者是其子類;
5、被重寫的方法不能為private,否則在其子類中只是新定義了一個方法,並沒s有對其進行重寫。
6、靜態方法不能被重寫為非靜態的方法(會編譯出錯)。
二、overload是重載,一般是用於在一個類內實現若乾重載的方法,這些方法的名稱相同而參數形式不同。
重載的規則:
1、在使用重載時只能通過相同的方法名、不同的參數形式實現。不同的參數類型可以是不同的參數類型,不同的參數個數,不同的參數順序(參數類型必須不一樣);
2、不能通過訪問許可權、返回類型、拋出的異常進行重載;
3、方法的異常類型和數目不會對重載造成影響;
多態的概念比較復雜,有多種意義的多態,一個有趣但不嚴謹的說法是:繼承是子類使用父類的方法,而多態則是父類使用子類的方法。
一般,我們使用多態是為了避免在父類里大量重載引起代碼臃腫且難於維護。

❸ Java中方法重寫時訪問修飾符為什麼不能變小,能寫代碼舉例一下嗎

如果允許重寫方法的訪問修飾符小於父類方法的訪問修飾符,那麼可能出現父類方法可見而子類方法不可見的問題,這就導致從外部來看子類對象不具有某些父類對象的屬性,從而破壞了繼承與多態規則。

❹ 簡述方法重載和方法重寫的區別

、方法重寫(0veriding)
在Java程序中,類的繼承關系可以產生一個子類,子類繼承父類,它具備了父類所有的特徵,繼承了父類所有的方法和變數。

子類可以定義新的特徵,當子類需要修改父類的一些方法進行擴展,增大功能,程序設計者常常把這樣的一種操作方法稱為重寫,也叫稱為覆寫或覆蓋。

重寫體現了Java優越性,重寫是建立在繼承關繫上,它使語言結構更加豐富。在Java中的繼承中,子類既可以隱藏和訪問父類的方法,也可以覆蓋繼承父類的方法。

在Java中覆蓋繼承父類的方法就是通過方法的重寫來實現的。所謂方法的重寫是指子類中的方法與父類中繼承的方法有完全相同的返回值類型、方法名、參數個數以及參數類型。

這樣,就可以實現對父類方法的覆蓋。如果子類將父類中的方法重寫了,調用的時候肯定是調用被重寫過的方法,那麼如果現在一定要調用父類中的方法該怎麼辦呢?

此時,通過使用super關鍵就可以實現這個功能,super關鍵字可以從子類訪問父類中的內容,如果要訪問被重寫過的方法,使用「super.方法名(參數列表)」的形式調用。

如果要使用super關鍵字不一定非要在方法重寫之後使用,也可以明確地表示某個方法是從父類中繼承而來的。使用super只是更加明確的說,要從父類中查找,就不在子類查找了。

重寫的好處在於子類可以根據需要,定義特定於自己的行為。
也就是說子類能夠根據需要實現父類的方法。
在面向對象原則里,重寫意味著可以重寫任何現有方法。實例如下:

class Animal{
public void move(){
System.out.println("動物可以移動");
}
}
class Dog extends Animal{
public void move(){
System.out.println("狗可以跑和走");
}
}
public class TestDog{
public static void main(String args[]){
Animal a = new Animal(); // Animal 對象
Animal b = new Dog(); // Dog 對象
a.move();// 執行 Animal 類的方法
b.move();//執行 Dog 類的方法
}
}

//運行結果
動物可以移動
狗可以跑和走

在上面的例子中可以看到,盡管b屬於Animal類型,但是它運行的是Dog類的move方法。

這是由於在編譯階段,只是檢查參數的引用類型。

然而在運行時,Java虛擬機(JVM)指定對象的類型並且運行該對象的方法。
因此在上面的例子中,之所以能編譯成功,是因為Animal類中存在move方法,然而運行時,運行的是特定對象的方法。
思考以下例子:

class Animal{
public void move(){
System.out.println("動物可以移動");
}
}
class Dog extends Animal{
public void move(){
System.out.println("狗可以跑和走");
}
public void bark(){
System.out.println("狗可以吠叫");
}
}
public class TestDog{
public static void main(String args[]){
Animal a = new Animal(); // Animal 對象
Animal b = new Dog(); // Dog 對象
a.move();// 執行 Animal 類的方法
b.move();//執行 Dog 類的方法
b.bark();
}
}
//以上實例編譯運行結果如下:
TestDog.java:30: cannot find symbol
symbol : method bark()
location: class Animal

該程序將拋出一個編譯錯誤,因為b的引用類型Animal沒有bark方法。

二、重寫規則
在重寫方法時,需要遵循以下的規則:
(一) 父類方法的參數列表必須完全與被子類重寫的方法的參數列表相同,否則不能稱其為重寫而是重載。

(二) 父類的返回類型必須與被子類重寫的方法返回類型相同,否則不能稱其為重寫而是重載。

(三) Java中規定,被子類重寫的方法不能擁有比父類方法更加嚴格的訪問許可權。編寫過Java程序的人就知道,父類中的方法並不是在任何情況下都可以重寫的,當父類中方法的訪問許可權修飾符為private時,該方法只能被自己的類訪問,不能被外部的類訪問,在子類是不能被重寫的。如果定義父類的方法為public,在子類定義為private,程序運行時就會報錯。

(四) 由於父類的訪問許可權修飾符的限制一定要大於被子類重寫方法的訪問許可權修飾符,而private許可權最小。所以如果某一個方法在父類中的訪問許可權是private,那麼就不能在子類中對其進行重寫。如果重新定義,也只是定義了一個新的方法,不會達到重寫的效果。

(五) 在繼承過程中如果父類當中的方法拋出異常,那麼在子類中重寫父類的該方法時,也要拋出異常,而且拋出的異常不能多於父類中拋出的異常(可以等於父類中拋出的異常)。換句話說,重寫方法一定不能拋出新的檢查異常,或者比被重寫方法聲明更加寬泛的檢查型異常。例如,父類的一個方法申明了一個檢查異常IOException,在重寫這個方法時就不能拋出Exception,只能拋出IOException的子類異常,可以拋出非檢查異常。同樣的道理,如果子類中創建了一個成員變數,而該變數和父類中的一個變數名稱相同,稱作變數重寫或屬性覆蓋。但是此概念一般很少有人去研究它,因為意義不大。

Super關鍵字的使用
當需要在子類中調用父類的被重寫方法時,要使用super關鍵字。

三、方法重載(Overloading)
方法重載是讓類以統一的方式處理不同類型數據的一種手段。調用方法時通過傳遞給它們的不同個數和類型的參數來決定具體使用哪個方法,這就是多態性。

所謂方法重載是指在一個類中,多個方法的方法名相同,但是參數列表不同。參數列表不同指的是參數個數、參數類型或者參數的順序不同。

方法的重載在實際應用中也會經常用到。不僅是一般的方法,構造方法也可以重載。

在方法重載時,方法之間需要存在一定的聯系,因為這樣可以提高程序的可讀性,一般只重載功能相似的方法。

重載是指我們可以定義一些名稱相同的方法,通過定義不同的參數來區分這些方法,然後再調用時,Java虛擬機就會根據不同的參數列表來選擇合適的方法執行。也就是說,當一個重載方法被調用時,Java用參數的類型或個數來決定實際調用的重載方法。因此,每個重載方法的參數的類型或個數必須是不同。

雖然每個重載方法可以有不同的返回類型,但返回類型並不足以區分所使用的是哪個方法。

當Java調用一個重載方法是,參數與調用參數匹配的方法被執行。在使用重載要注意以下的幾點:
1.在使用重載時只能通過不同的參數列表,必須具有不同的參數列表。
2.不能通過訪問許可權、返回類型、拋出的異常進行重載。
3.方法的異常類型和數目不會對重載造成影響。
4.可以有不同的返回類型,只要參數列表不同就可以了。
5.可以有不同的訪問修飾符。
6.可以拋出不同的異常。

重載(overloading) 是在一個類裡面,方法名字相同,而參數不同。返回類型呢?可以相同也可以不同。
每個重載的方法(或者構造函數)都必須有一個獨一無二的參數類型列表。
只能重載構造函數

四、重載規則
被重載的方法必須改變參數列表;
被重載的方法可以改變返回類型;
被重載的方法可以改變訪問修飾符;
被重載的方法可以聲明新的或更廣的檢查異
五、訪問修飾符
訪問修飾符 本類 同包 子類 其他
private √
默認 √ √
protected √ √ √
public √ √ √
重寫與重載之間的區別

方法重載:
1、同一個類中
2、方法名相同,參數列表不同(參數順序、個數、類型)
3、方法返回值、訪問修飾符任意
4、與方法的參數名無關

方法重寫:
1、有繼承關系的子類中
2、方法名相同,參數列表相同(參數順序、個數、類型),方法返回值相同
3、訪問修飾符,訪問范圍需要大於等於父類的訪問范圍
4、與方法的參數名無關

區別點 重載方法 重寫方法
參數列表 必須修改 一定不能修改
返回類型 可以修改 一定不能修改
異常 可以修改 可以減少或刪除,一定不能拋出新的或者更廣的異常
訪問 可以修改 一定不能做更嚴格的限制(可以降低限制)

❺ 重載 和 重寫 的區別

重載: Java的方法重載,就是在類中可以創建多個方法,它們具有相同的名字,但具有不同的參數和不同的定義。調用方法時通過傳遞給它們的不同參數個數和參數類型來決定具體使用哪個方法, 這就是多態性。
重寫:父類與子類之間的多態性,對父類的函數進行重新定義。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫 (Overriding)。在Java中,子類可繼承父類中的方法,而不需要重新編寫相同的方法。但有時子類並不想原封不動地繼承父類的方法,而是想作一定的修改,這就需要採用方法的重寫。方法重寫又稱方法覆蓋。
簡單說,就是同樣的一個方法能夠根據輸入數據的不同,做出不同的處理,即方法的 重載——有不同的參數列表(靜態多態性)
而當子類繼承自父類的相同方法,輸入數據一樣,但要做出有別於父類的響應時,你就要覆蓋父類方法,即在子類中重寫該方法——相同參數,不同實現(動態多態性)
重寫方法的規則:
1、參數列表必須完全與被重寫的方法相同,否則不能稱其為重寫而是重載。
2、返回的類型必須一直與被重寫的方法的返回類型相同,否則不能稱其為重寫而是重載。
3、訪問修飾符的限制一定要大於被重寫方法的訪問修飾符(public>protected>default>private)
4、重寫方法一定不能拋出新的檢查異常或者比被重寫方法申明更加寬泛的檢查型異常。例如:
父類的一個方法申明了一個檢查異常IOException,在重寫這個方法是就不能拋出Exception,只能拋出IOException的子類異常,可以拋出非檢查異常。

而重載的規則:
1、必須具有不同的參數列表;
2、可以有不責罵的返回類型,只要參數列表不同就可以了;
3、可以有不同的訪問修飾符;
4、可以拋出不同的異常;

重寫與重載的區別在於:
重寫多態性起作用,對調用被重載過的方法可以大大減少代碼的輸入量,同一個方法名只要往裡面傳遞不同的參數就可以擁有不同的功能或返回值。
用好重寫和重載可以設計一個結構清晰而簡潔的類,可以說重寫和重載在編寫代碼過程中的作用非同一般.

❻ 為什麼子類重寫父類的方法的訪問修飾符,不能低於父類的方法訪問許可權

重寫也叫覆寫,修飾符、返回類型、參數就是要和父類一摸一樣才叫覆寫,意思是說各個地方都需要完美的蓋住,在面向介面編程中,重寫是子類有自己的邏輯要實現,同時又不破壞已寫好程序邏輯的好方法
======================================================
舉個例子,在父類中是public的方法,如果子類中將其降低訪問許可權為private,那麼子類中重寫以後的方法對於外部對象就不可訪問了,這個就破壞了繼承的含義

❼ 方法重載和重寫的區別,方法重載重寫區別

一、方法重寫(0veriding)
在Java程序中,類的繼承關系可以產生一個子類,子類繼承父類,它具備了父類所有的特徵,繼承了父類所有的方法和變數。
子類可以定義新的特徵,當子類需要修改父類的一些方法進行擴展,增大功能,程序設計者常常把這樣的一種操作方法稱為重寫,也叫稱為覆寫或覆蓋。
重寫體現了Java優越性,重寫是建立在繼承關繫上,它使語言結構更加豐富。在Java中的繼承中,子類既可以隱藏和訪問父類的方法,也可以覆蓋繼承父類的方法。
在Java中覆蓋繼承父類的方法就是通過方法的重寫來實現的。所謂方法的重寫是指子類中的方法與父類中繼承的方法有完全相同的返回值類型、方法名、參數個數以及參數類型。
這樣,就可以實現對父類方法的覆蓋。如果子類將父類中的方法重寫了,調用的時候肯定是調用被重寫過的方法,那麼如果現在一定要調用父類中的方法該怎麼辦呢?
此時,通過使用super關鍵就可以實現這個功能,super關鍵字可以從子類訪問父類中的內容,如果要訪問被重寫過的方法,使用「super.方法名(參數列表)」的形式調用。
如果要使用super關鍵字不一定非要在方法重寫之後使用,也可以明確地表示某個方法是從父類中繼承而來的。使用super只是更加明確的說,要從父類中查找,就不在子類查找了。

二、重寫規則
在重寫方法時,需要遵循以下的規則:
(一) 父類方法的參數列表必須完全與被子類重寫的方法的參數列表相同,否則不能稱其為重寫而是重載。
(二) 父類的返回類型必須與被子類重寫的方法返回類型相同,否則不能稱其為重寫而是重載。..
(三) Java中規定,被子類重寫的方法不能擁有比父類方法更加嚴格的訪問許可權。編寫過Java程序的人就知道,
父類中的方法並不是在任何情況下都可以重寫的,當父類中方法的訪問許可權修飾符為private時,該方法只能被自己的類訪問,
不能被外部的類訪問,在子類是不能被重寫的。如果定義父類的方法為public,在子類定義為private,程序運行時就會報錯。
(四) 由於父類的訪問許可權修飾符的限制一定要大於被子類重寫方法的訪問許可權修飾符,而private許可權最小。
所以如果某一個方法在父類中的訪問許可權是private,那麼就不能在子類中對其進行重寫。如果重新定義,也只是定義了一個新的方法,不會達到重寫的效果。
(五) 在繼承過程中如果父類當中的方法拋出異常,那麼在子類中重寫父類的該方法時,也要拋出異常,
而且拋出的異常不能多於父類中拋出的異常(可以等於父類中拋出的異常)。換句話說,重寫方法一定不能拋出新的檢查異常,
或者比被重寫方法聲明更加寬泛的檢查型異常。例如,父類的一個方法申明了一個檢查異常IOException,在重寫這個方法時就不能拋出Exception,
只能拋出IOException的子類異常,可以拋出非檢查異常。同樣的道理,如果子類中創建了一個成員變數,
而該變數和父類中的一個變數名稱相同,稱作變數重寫或屬性覆蓋。但是此概念一般很少有人去研究它,因為意義不大。

三、方法重載(Overloading)
方法重載是讓類以統一的方式處理不同類型數據的一種手段。調用方法時通過傳遞給它們的不同個數和類型的參數來決定具體使用哪個方法,這就是多態性。
所謂方法重載是指在一個類中,多個方法的方法名相同,但是參數列表不同。參數列表不同指的是參數個數、參數類型或者參數的順序不同。
方法的重載在實際應用中也會經常用到。不僅是一般的方法,構造方法也可以重載。
在方法重載時,方法之間需要存在一定的聯系,因為這樣可以提高程序的可讀性,一般只重載功能相似的方法。
重載是指我們可以定義一些名稱相同的方法,通過定義不同的參數來區分這些方法,然後再調用時,Java虛擬機就會根據不同的參數列表來選擇合適的方法執行
。也就是說,當一個重載方法被調用時,Java用參數的類型或個數來決定實際調用的重載方法。因此,每個重載方法的參數的類型或個數必須是不同。
雖然每個重載方法可以有不同的返回類型,但返回類型並不足以區分所使用的是哪個方法。
當Java調用一個重載方法是,參數與調用參數匹配的方法被執行。在使用重載要注意以下的幾點:
1.在使用重載時只能通過不同的參數列表,必須具有不同的參數列表。
2.不能通過訪問許可權、返回類型、拋出的異常進行重載。
3.方法的異常類型和數目不會對重載造成影響。
4.可以有不同的返回類型,只要參數列表不同就可以了。
5.可以有不同的訪問修飾符。
6.可以拋出不同的異常。

❽ 為什麼訪問修飾符的限制一定要大於被重寫方法的訪問修飾符

一定要小於或者等於吧?不是大於。這樣才能覆蓋父類的方法啊。不然怎麼覆蓋。如果大於的話,那是自己定義的一個方法了。就不叫覆蓋了。

閱讀全文

與重寫方法為什麼修飾符要大相關的資料

熱點內容
沂蒙山楂的食用方法 瀏覽:177
系統思維的訓練方法 瀏覽:41
組合數計算方法高中數學例題 瀏覽:305
如何用物理方法卷發 瀏覽:194
穿絲襪的正確方法視頻教程 瀏覽:220
簡單鍛煉方法視頻捂臉 瀏覽:274
如何喚醒孩子的方法 瀏覽:567
雙開雙控插座安裝方法視頻 瀏覽:704
gps手持測畝儀使用方法 瀏覽:152
有什麼方法可以安眠 瀏覽:215
種大蒜的視頻種植方法 瀏覽:172
什麼樣的方法能瘦下來 瀏覽:429
蟲牙打洞治療方法 瀏覽:889
糖尿病檢測方法題 瀏覽:528
2012年汾酒鑒定方法及技巧 瀏覽:119
如何自己製作竹子的方法 瀏覽:854
面部混合痣的最佳治療方法 瀏覽:361
中種發酵方法和技巧 瀏覽:407
中學生物教學方法ppt 瀏覽:985
怎麼設置qq鈴聲設置方法 瀏覽:64