- 方法重載和方法重寫的區(qū)別是什么 推薦度:
- 方法重載和方法重寫的概念和區(qū)別 推薦度:
- 相關(guān)推薦
方法重載與方法重寫
方法重載與方法重寫
方法重載:就是在同一個類中,方法的名字相同,但參數(shù)個數(shù)、參數(shù)的類型或返回值類型不同!
方法重寫:它是指子類和父類的關(guān)系,子類重寫了父類的方法,但方法名、參數(shù)類型、參數(shù)個數(shù)必須相同!
Java語言中的概念就是多,這回又有兩個概念,重載和重寫。這是兩個新概念,也是兩個令初學(xué)者容易混淆的概念。他們的概念截然不同,只不過都有個“重”字,就以為是很像的。
下面解釋一下這兩個概念:
方法重載(overloading method) 是在一個類里面,方法名字相同,而參數(shù)不同。返回類型呢?可以相同也可以不同。
方法重寫(overiding method) 子類不想原封不動地繼承父類的方法,而是想作一定的修改,這就需要采用方法的重寫。方法重寫又稱方法覆蓋。如果還是搞混的話,就把“重寫覆蓋”,這個詞多念幾遍吧。知道是覆蓋的話,就知道是子類覆蓋父類的方法了。
實踐: 重載的例子
public class MethodOverloading {
void recieve(int i) {
System.out.println("接收一個int數(shù)據(jù)");
System.out.println("i="+i);
}
void recieve(float f) {
System.out.println("接受一個float型的數(shù)據(jù)");
System.out.println("f="+f);
}
void recieve(String s) {
System.out.println("接受一個String型數(shù)據(jù)");
System.out.println("s="+s);
}
public static void main(String[] args){
MethodOverloading m = new MethodOverloading();
m.recieve(3456);
m.recieve(34.56);
m.recieve(“......“);
}
}
大家看到了上面的例子方法receive()有三個,名字相同參數(shù)不同。這樣的話,在main()調(diào)用的時候,參數(shù)用起來就很方便了。重寫的例子似乎不用舉了,記不住的話,就和“覆蓋”。
有時候,重載和重寫的方式有些復(fù)雜,在jdk5里面。有一些方式能簡化一些。我們來看看吧,jdk5的可變參數(shù)。 如果把相同參數(shù)類型的方法重載好幾遍真的是很煩。就一個方法,pri(String args), pri(String arg0 ,String arg1), pri(String arg0,String arg1,String arg2), pri(String arg0,String arg1,String arg2,String arg3)。這樣的話會寫很多煩瑣的代碼,F(xiàn)在jdk5可以,用“…”來代替這些參數(shù)。
實踐:
public class overload {
//若干個相同類型的參數(shù),用“...”代替
public void pri(String... strings ){
for (String str : strings) //for這個循環(huán)語句也有迭代的意思
System.out.print(str);
}
public static void main(String[] args){
new overload().pri("100jq"," );
}
}
jdk5的方法重寫,比以前多了一個叫做協(xié)變返回的概念。在以往jdk的版本中,還有一個比較讓人討厭的地方。方法重寫確實是比較不錯的機(jī)制,如果想用父類的方法,寫個super就可以了,如果不想用父類的方法就重寫覆蓋。但是重寫覆蓋的返回類型不能覆蓋,父類的類型不夠用怎么辦,我們想在子類重寫它的類型可以嗎?現(xiàn)在可以了。
看下面的例子:
class Point2D { //定義二維的點(diǎn)
protected int x, y;
public Point2D() {
this.x=0;
this.y=0;}
public Point2D(int x, int y) {
this.x = x;
this.y = y;
}}
//定義三維的點(diǎn),繼承二維
class Point3D extends Point2D {
protected int z;
public Point3D(int x, int y) {
this(x, y, 0);
}
public Point3D(int x, int y, int z) {
this.x = x;
this.y = y;
this.z = z;
}}
//定義二維的位置
class Position2D {
Point2D location;
public Position2D() {
this.location = new Point2D();
}
public Position2D(int x, int y) {
this.location = new Point2D(x, y);
}
public Point2D getLocation() {
return location;
}}
//定義三維的位置,繼承二維的位置
class Position3D extends Position2D {
Point3D location; //在這里已經(jīng)變成Point3D的類型了
public Position3D(int x, int y, int z) {
this.location = new Point3D(x, y, z);
}
@Override //注釋是重寫方法
public Point3D getLocation() {
return location; //返回是子類的類型而不是原來的類型了
}
}
【方法重載與方法重寫】相關(guān)文章:
方法重載和方法重寫的概念和區(qū)別09-06
方法重載和方法重寫的區(qū)別是什么11-16
方法重載的條件09-23
什么是方法重載11-15
方法重載與覆蓋的區(qū)別11-04
學(xué)習(xí)方法要有科學(xué)的方法10-11
預(yù)習(xí)方法和學(xué)期預(yù)習(xí)方法10-26
重寫作文10-03
方法的作文03-11
學(xué)習(xí)的方法08-14