過載overlord與重寫override的區別
重寫只存在於子類與父類中,過載存在於一個類中。
具體區別如下:
一、重寫(override)
override是重寫(覆蓋)了一個方法,以實現不同的功能。一般是用於子類在繼承父類時,重寫(重新實現)父類中的方法。
重寫(覆蓋)的規則:
1、重寫方法的引數列表必須完全與被重寫的方法的相同,否則不能稱其為重寫而是過載.
2、重寫方法的訪問修飾符一定要大於被重寫方法的訪問修飾符(public>protected>default>private)。
3、重寫的方法的返回值必須和被重寫的方法的返回一致;
4、重寫的方法所丟擲的異常必須和被重寫方法的所丟擲的異常一致,或者是其子類;
5、被重寫的方法不能為private,否則在其子類中只是新定義了一個方法,並沒s有對其進行重寫。
6、靜態方法不能被重寫為非靜態的方法(會編譯出錯)。
二、overload是過載,一般是用於在一個類內實現若干過載的方法,這些方法的名稱相同而引數形式不同。
過載的規則:
1、在使用過載時只能通過相同的方法名、不同的引數形式實現。不同的引數型別可以是不同的引數型別,不同的引數個數,不同的引數順序(引數型別必須不一樣);
2、不能通過訪問許可權、返回型別、丟擲的異常進行過載;
3、方法的異常型別和數目不會對過載造成影響;
多型的概念比較複雜,有多種意義的多型,一個有趣但不嚴謹的說法是:繼承是子類使用父類的方法,而多型則是父類使用子類的方法。
一般,我們使用多型是為了避免在父類裡大量過載引起程式碼臃腫且難於維護。
繼承是子類獲得父類的成員,重寫是繼承後重新實現父類的方法。過載是在一個類裡一系列引數不同名字相同的方法。多型則是用基類的引用指向子類的物件。
網上看到一個有趣的說法是:繼承是子類使用父類的方法,而多型則是父類使用子類的方法。
下面的例子包含了這四種實現:
//Triangle 繼承Shape類
class Triangle extends Shape {
//重寫Shape類中的getSides方法
public int getSides() {
return 3;
}
}
//Rectangle 繼承Shape類
class Rectangle extends Shape {
//過載Shape類中的getSides方法(在父類中getSide方法中添加了引數)
public int getSides(int i) {
return i;
}
}
//父類
public class Shape {
public boolean isSharp(){
return true;
}
public int getSides(){
return 0 ;
}
public int getSides(Triangle tri){
return 3 ;
}
public int getSides(Rectangle rec){
return 4 ;
}
public static void main(String[] args) {
Triangle tri = new Triangle();
System.out.println("Triangle is a type of sharp? " + tri.isSharp());
//isShape()為父類中的方法,Triangle中沒有,所以tri.isSharp()方法為繼承父類中的方法
Shape shape = new Triangle();
//new一個物件為Triangle的Shape例項(和new一個物件為dog的animal例項一樣理解)
//此為父類的多型
System.out.println("My shape has " + shape.getSides() + " sides.");
}
}
比較就可以發現多型對過載的優點:如果用過載,則在父類裡要對應每一個子類都過載一個取得邊數的方法;如果用多型,則父類只提供取得邊數的介面,至於取得哪個形狀的邊數,怎樣取得,在子類裡各自實現(重寫)。
相關推薦
過載overlord與重寫override的區別
重寫只存在於子類與父類中,過載存在於一個類中。 具體區別如下: 一、重寫(override) override是重寫(覆蓋)了一個方法,以實現不同的功能。一般是用於子類在繼承父類時,重寫(重新實現)父類中的方法。 重寫(覆蓋)的規則: 1、重寫方
方法過載overload與重寫override的區別
過載Overload 重寫Override 相同點 見下 見下 不同點 引數簽名必須不一致 引數簽名必須一致 不限制返回型別 返回型別必須一致 用於同一個類的所有方法(包括從父類中繼承而來的方法) 只用於子類重寫覆蓋父類的方法 不限制… 對方法的訪問許可權和丟擲異常
過載與重寫的區別(overload與override);
重寫與過載的主要區別:(方法也叫做函式)(1)存在的位置;(2)方法名、引數列表和返回值;(3)修飾符、異常。過載(overload)的特點:1:存在於同類之中,也存在於子類與父類之中。2:方法同名,引數列表不一樣。函式的返回值型別不做要求。3:方法的異常型別和異常的數目不會
【Java筆記】方法過載與重寫的區別
1.重寫(Override) 重寫是子類對父類的允許訪問的方法的實現過程進行重新編寫, 返回值和形參都不能改變。即外殼不變,核心重寫! 重寫的好處在於子類可以根據需要,定義特定於自己的行為。 也就是說子類能夠根據需要實現父類的方法。 重寫方法不能丟擲新的檢查異常或者比被重寫方法申明更加寬
Java的過載與重寫的區別
一、過載 過載就是在類的同一種功能的多種實現方式,到底採用哪種方式,取決於呼叫者給出的引數。 過載是一個類中多型性的一種表現。 方法名相同,方法的引數型別、個數、順序至少有一項不同,方法返回型別可以不同(只是返回型別不一樣,不能構成過載),方法的修飾符可以不同(只是控
Java之路:方法過載與重寫的區別
一、方法的過載(overload) 方法名相同但引數列表不同的方法簽名機制,稱之為方法的過載(method overload)。 過載的表現形式就是呼叫一系列具有相同名稱的方法,這些方法可根據傳入引數的不同而得到不同的處理結果,這其實就是多型性的一種體現,這屬於靜態多型,即同一種介面
C# 過載(overload)與重寫(override)
1 重寫(override) 重寫(overload)指子類方法對基類虛方法的重寫。當基類中的方法被宣告為虛方法(使用關鍵字virtual),該方法可以在任何子類中被重寫。若子類需要使用父類中原有的方
[轉載]Java中過載與重寫的區別
首先我們來講講:過載(Overloading) (1) 方法過載是讓類以統一的方式處理不同型別資料的一種手段。多個同名函式同時存在,具有不同的引數個數/型別。 過載Overloading是一個類中多型性的一種表現。 (2) Java的方法過載,就是
java中過載與重寫的區別以及與多型的關係
首先我們來講講:過載(Overloading) (1) 方法過載是讓類以統一的方式處理不同型別資料的一種手段。多個同名函式同時存在,具有不同的引數個數/型別。 過載Overloading是一個類中多型性的一種表現。 (2) Java的方法過載,就是在類中可以建立多
Java中過載(Overload)和重寫(Override)的區別
過載(Overload) 過載是指在一個類裡面,方法名相同,引數不同。java中有構造器過載和方法過載(意義是一樣的,叫法不同) public class Car { private String name; private String p
java中方法的過載與重寫的區別
(1) 父類與子類之間的多型性,對父類的函式進行重新定義。如果在子類中定義某方法與其父類有相同的名稱和引數,我們說該方法被重寫 (Overriding)。在Java中,子類可繼承父類中的方法,而不需要重新編寫相同的方法。 (adsbygoogle = window.ads
java:面向物件(過載與重寫的區別)
* Override和Overload的區別?Overload能改變返回值型別嗎? * overload可以改變返回值型別,只看引數列表 * 方法重寫:子類中出現了和父類中方法宣告一模一
java過載與重寫的區別+重寫父類equals方法的完美實現
【0】README 【1】java過載 1.1) 方法過載是讓類以統一的方式處理不同型別資料的一種手段。多個同名函式同時存在,具有不同的引數個數/型別。過載Overloading是一個類中多型性的一種表現。 1.2) Java的方法過載,就是在
過載與重寫的區別
一、過載 如果同一個類中包含了兩個或兩個以上方法名相同、但有有不同的引數列表,則稱為方法的過載,也可稱該方法被過載了。 過載
Java中重載與重寫的區別
ref 類對象 就是 不同 3.4 做出 同方 相同 默認 簡單的個人記憶,重寫是子類中的方法與父類的方法參數、返回值一模一樣,重載是對於同一個類中的方法,方法名相同,參數類型、個數不同。當父類的引用指向子類對象的時候,子類中如果有對於父類方法的重寫,則調用的是子類重寫過的
重載與重寫的區別
ng-click tis pub trac private spa 存在 AR dsm 重載(Overloading) 方法重載是讓類以統一的方式處理不同類型數據的一種手段。多個同名函數同時存在,具有不同的參數個數/類型。 重載Overloading是一個類中
【Java】重載(Overload)與重寫(Override)
{} 方法 ide jump exce 上一條 內部 https pre 方法的語法 修飾符 返回值類型 方法名(參數類型 參數名){ ... 方法體 ... return 返回值; } 重載(overload) /** * 重載
c# 虛擬函式Virtual與重寫override
C#程式碼 using System; namespace Smz.Test { class A { public virtua
java 方法的過載(overloading)與重寫(overwriting)
首先,方法的過載與重寫發生在子類繼承父類的過程中 然後,方法的過載是指子類的方法與父類中的方法名一致,但是方法中引數的種類或是數量不一致;重寫,顧名思義就是重新再寫一遍父類的方法,方法名,引數的種類和
【Java】方法過載和方法重寫的區別
方法過載和方法重寫在英文中分別是overload和override,很多人在學習Java的過程中總是分不清重寫和過載這兩個方法,實際上,這兩個方法還是有很大的差別的,過載和重寫這兩個方法雖然名字有些類似,但他們之間有很少的聯絡,除了二者都是發生在方法之間,並要求