重載和重寫都是針對方法的概念,在弄清楚這兩個概念之前,我們先來了解一下什麼叫方法的型構(英文名是signature,有的譯作“簽名”,雖然它被使用的較爲廣泛,但是這個翻譯不準確的)。型構就是指方法的組成結構,具體包括方法的名稱和參數,涵蓋參數的數量、類型以及出現的順序,但是不包括方法的返回值類型,訪問權限修飾符,以及abstract、static、final等修飾符。
1.比如下面兩個就是具有相同型構的方法:
public void method(int i, String str) {
}
public String method(int i, String str) {
}
2.下面兩個就是具有不同型構的方法
public void method(int i, String str) {
}
public void method(int i, double b) {
}
重寫,英文名是overriding,是指在繼承情況下,子類中定義了與其基類中方法具有相同型構的新方法,就叫做子類把基類的方法重寫了。這是實現多態必須的步驟。重載,英文名是overloading,是指在同一個類中定義了一個以上具有相同名稱,但是型構不同的方法。在同一個類中,是不允許定義多於一個的具有相同型構的方法的。
一.方法的重載:
1.返回類型可以不同
你可以任意地改變重載方法的返回類型,只要所有的覆蓋使用不同的參數即可
2.不能只改變返回類型
package cn.edu.hpu.example;
public class Haha {
public int sum(int num1, int num2) {
return num1 + num2;
}
public double sum(int num1, double num2) {
int sum = num1 + (int) num2;
return sum + 2;
}
}
二,方法的重寫
一個類M繼承另一個類N,N中有一個方法A,這時你在M寫了一個方法B,方法B的名字、返回值以及參數都和A一樣,此時B重寫了A。
public class Father {
public void Song() {
System.out.println("this is father's sing");
}
}
public class Son extends Father{
@Override
public void Song() {
// TODO Auto-generated method stub
System.out.println("this is son' sing");
}
}
public static void main(String[] args) {
Father f = new Father();
f.Song();
Father s = new Son();
s.Song();
}