過載和覆蓋的區別都有哪些
過載和覆蓋是多型性的兩大主要表現,學習程式碼的朋友對此可能會有所瞭解,但是可能理解不深,下面是小編帶來的關於過載和覆蓋的區別的內容,歡迎大家閱讀!
過載和覆蓋的區別
在同一個類中方法成員的名稱相同,但引數的型別和個數不同,這稱為過載。
在存在繼承關係的兩個話,子類與父類的方法成員名稱相同、引數的型別和個數相同的話,子類的方法覆蓋父類的方法,這稱為覆蓋。
下面舉個例子說明一下。例如:
class Shape {
void draw****** {}
void erase****** {}
}
class Circle extends Shape {
void draw****** {
System.out.println***"Circle.draw******"***;
}
void erase****** {
System.out.println***"Circle.erase******"***; }
}
class Square extends Shape {
void draw****** {
System.out.println***"Square.draw******"***;
}
void erase****** {
System.out.println***"Square.erase******"***;
}
}
class Triangle extends Shape {
void draw****** {
System.out.println***"Triangle.draw******"***;
}
void erase****** {
System.out.println***"Triangle.erase******"***;
}
}
public class Test {
public static Shape randShape****** {
switch******int******Math.random****** * 3****** {
default:
case 0: return new Circle******;
case 1: return new Square******;
case 2: return new Triangle******;
} }
public static void main***String[] args*** {
Shape[] s = new Shape[9];
for***int i = 0; i < s.length; i++***
s[i] = randShape******;
for***int i = 0; i < s.length; i++***
s[i].draw******;
}
}
輸出結果
Triangle.draw******
Circle.draw******
Triangle.draw******
Triangle.draw******
Triangle.draw******
Square.draw******
Square.draw******
Triangle.draw******
Circle.draw******
Triangle.erase******
Circle.erase******
Triangle.erase******
Triangle.erase******
Triangle.erase******
Square.erase******
Square.erase******
Triangle.erase******
Circle.erase******
Press any key to continue...
又一次執行
Triangle.draw******
Triangle.draw******
Circle.draw******
Circle.draw******
Circle.draw******
Triangle.draw******
Triangle.draw******
Square.draw******
Circle.draw******
Triangle.erase******
Triangle.erase******
Circle.erase******
Circle.erase******
Circle.erase******
Triangle.erase******
Triangle.erase******
Square.erase******
Circle.erase******
Press any key to continue...
兩次執行結果不同的原因是其中的Math.random******這個類導致的,math.random******得到的數是0-1之間的隨機數。
不過,最重要的一點區別是:通過方法過載進而實現物件的多型性。
方法過載是指功能相同的多個方法使用同一個方法名。同名的多個方法的引數要有所不同,即在引數型別,引數個數和引數順序上要有所區別,以便作為選擇某個方法的根據。通常只有功能相同的方法進行過載才有意義。
例如:計算兩個數之和的過載方法定義如下:
int add***int i,int j***
{retrun i+j;}
float add***float i,float j***
{retrun i+j;}
double add***double i,double j***
{retrun i+j;}
過載方法的選擇通常是在編譯時進行。系統根據不同的引數型別,個數或順序,尋找最佳匹配方法.方法型別不參與匹配。
過載和覆蓋的介紹
多型性也是面向物件方法的一個重要特性.多型性是指在在程式中出現的"重名"現象,即在一個程式中相同的名字可以表示不同的實現.
在JAVA中,多型性主要表現在如下兩個方面:
***1***方法過載.通常指在同一個類中,相同的方法名對應著不同的方法實現,但是方法的引數不同.
***2***成員覆蓋.通常指在不同類***父類和子類***中,允許有相同的變數名,但是資料型別不同;也允許有相同的方法名,但是對應的方法實現不同.
在過載的情況下,同一類中具有相同的名字的方法.如何選擇它的方法體呢?不能使用類名來區分,通常採用不同的方法形參表,區分過載要求形參在型別,個數和順序的不同,在定義過載方法時,應在方法的形參的型別,個數和順序有所不同,以便在選擇時能夠區別開來.
在覆蓋的情況下,同名的方法存在於不同的類中,在呼叫方法只要指明其方法所歸屬的類名就可以了.
過載與覆蓋的具體例子
public class Base{
int a,b;
public Base***int x,int y***{
a = x;
b = y;
}
public int add******{
return ***a + b***;
}
public void add***int x,int y***{
int z;
z = x + y;
}
}
上面這段程式碼就是過載的三個特徵 :
1:方法名必須一樣 “add******“。
2:返回型別可以不一樣 就象是 ”int “和”void“.
3:引數可以不一樣 就是add****** 和add***int x,int y***這樣的。
public class Base{
int x,y;
public void add******{
int z;
z = x + y;
}
}
public class Child extends Base{
int x,y;
public void add******{
int z;
z = x + y;
}
public static void main***string [] args***{
Base b = new Child******;
b.add******;
}
}
下面這個例子就是重寫,他實現了多型。
重寫的要求是,方法名必須一樣,返回型別必須一樣,傳入的引數必須一樣。
在main函式中定義父類的物件,但是用子類去例項化他,這樣就可以通過父類的物件呼叫到子類的方法。
下面舉個例子,例如:
public class Parent {
public int addValue*** int a, int b*** {
int s;s = a+b;return s;
}
}
class Child extends Parent {
}
Which methods can be added into class Child?
a int addValue*** int a, int b ***{// do something...}
b public void addValue ******{// do something...}
c public int addValue*** int a ***{// do something...}
d public int addValue*** int a, int b ***throws MyException {//do something...}
答案為B.C
解釋1:
a是覆蓋,b ,c是過載。
a的問題出在訪問許可權上,如果換成public也是可以的。
d是異常的問題。
解釋2:
a的訪問許可權小於父類,所以錯誤,d是異常錯誤,b和c中的addValue方法和父類的方法引數不同,所以是過載。
- 過載和覆蓋的區別都有哪些
- 腦筋急轉彎長壽祕訣是什麼
- 腦筋急轉彎霍元甲的弟弟叫什麼的答案是什麼
- 性病有哪些種類
- 一鳴驚人的成語接龍集錦
- 關於置之不理開頭的成語接龍
- 心情說說短語很經典的
- 人際交往中的十大黃金法則
- 家長如何教育孩子的書籍推薦
- 柿子不能多吃的原因是什麼
- 如何醫治腦梗塞
- 2017最好看的玄幻小說排行榜前十名
- 飼養短毛貓技巧
- 人生過客的句子_感悟人生過客經典語錄
- 腎虛腎虧吃什麼藥最好
- 幼兒園小班交通安全教案範文
- 為什麼硬碟寫入快取失敗
- 胃寒的臨床症狀
- 小學寓言故事素材
- 早上吃早餐的簡單勵志問候語
- 康熙字典五行屬金的字
- 康熙字典五行屬木的字
- 康熙字典五行屬水的字
- 康熙字典五行屬火的字
- 康熙字典五行屬土的字