另一種問法:overload和override的區別
概念 在同一類中,出現方法名稱相同,引數列表的不同就是過載,引數列表可以是型別或者個數不同,構造器也可以過載
規則 過載跟方法的許可權修飾符、返回值型別、形參變數名、方法體沒關係
//構成過載的方法
public
void
getsum
(int i,
int j)
public
void
getsum
(double d1,
double d2)
public
void
getsum
(string s ,
int i)
public
void
getsum
(int i,string s)
//以下不構成過載
public
intgetsum
(int i,
int j)
public
void
getsum
(int m,
int n)
private
void
getsum
(int i,
int j)
概念
子類繼承父類以後,可以對父類中同名同引數的方法,進行覆蓋操作。構造器不能重寫;
重寫以後,當子類的物件呼叫這個子父類同名同引數的方法時,實際執行的是子類重寫的方法;
規則要求:兩同兩小一大
修飾符:重寫的方法的修飾符範圍》=被重寫方法的修飾符範圍(public>protected>預設》private) 特殊情況:子類不能重寫父類中宣告為private許可權的方法
丟擲的異常:子類重寫的方法丟擲的異常型別不大於父類被重寫的方法丟擲的異常型別
補充:重寫的方法不能是static的,final的,子類不可見的
子類和父類中的同名同引數的方法被宣告為static的則不是重寫。
舉例:
class
circle
//求面積
}class
cylinder
extends
circle
//求表面積}*
****
****
****
**class
account
}class
checkaccount
extends
account
}
名詞overload方法的過載override方法的重寫
位置同乙個類中
在父子類中
方法名必須相同
必須相同
形參列表必須不同必須相同
返回值型別無關
<= 如果返回值型別是void和基本資料型別,那麼必須一致,如果是引用資料型別,重寫方法的返回值型別可以和被重寫方法的返回值型別一樣或是它的子類
丟擲的異常列表無關
<= 重寫方法丟擲的異常型別要麼和被重寫方法一樣,要麼是被重寫方法丟擲異常的子類
許可權修飾符無關 (建議一致)
>= 重寫方法的許可權修飾符要麼和被重寫方法一樣,要麼比被重寫方法的許可權範圍大
過載:不表現為多型性
過載,是指允許存在多個同名方法,而這些方法的引數不同。編譯器根據方法不同的參數列,對同名方法的名稱做修飾。對於編譯器而言,這些同名方法就成了
方法呼叫之前,編譯器就已經確定了所要呼叫的方法,這稱為「早繫結」或「靜態繫結」;
重寫:表現為多型性
而對於多型,只等到方法呼叫的那一刻,解釋執行器才會確定所要呼叫的具體方法,這稱為「晚繫結」或「動態繫結」。
重寫與過載
override 為覆蓋又叫重寫,從字面就可以知道,它是覆蓋了乙個方法並且對其重寫,以求達到不同的作用。對我們來說最熟悉的覆蓋就是對介面方法的實現,在介面中一般只是對方法進行了宣告,而我們在實現時,就需要實現介面宣告的所有方法。除了這個典型的用法以外,我們在繼承中也可能會在子類覆蓋父類中的方法。在覆...
過載與重寫
過載與重寫 面對過載與重寫有時會像失憶一樣,將這兩個內容搞混。在實際運用中,我們一般是不會混的。但在給別人講述的過程中,可能會出現張冠李戴將兩個名詞搞混,這是不利於傳播的。讓我們來一起加深一下 過載 相同函式名稱,不同引數或不同引數型別。舉個例子 class oneclass public doub...
重寫與過載
重寫方法的規則 1.引數列表必須完全與被重寫的方法的相同,否則不能稱其為重寫而是過載.2.返回的型別必須一直與被重寫的方法的返回型別相同,否則不能稱其為重寫而是過載.3.訪問修飾符的限制一定要大於被重寫方法的訪問修飾符 public protected default private 4.重寫方法一...