重載:overload
重載Overload表示同一個類中可以有多個名稱相同的方法,但這些方法的參數列表各不相同(即參數個數或類型不同)
重寫:override
表示子類中的方法可以與父類中的某個方法的名稱和參數完全相同,通過子類創建的實例對象調用這個方法時,將調用子類中的定義方法,這相
當於把父類中定義的那個完全相同的方法給覆蓋了,這也是面向對象編程的多態性的一種表現
函數重寫時子類方法的訪問權限不能比父類的弱
override可以翻譯爲覆蓋,從字面就可以知道,它是覆蓋了一個方法並且對其重寫,以求達到不同的作用。對我們來說最熟悉的覆蓋就是對接口方法的實現,在接口中一般只是對方法進行了聲明,而我們在實現時,就需要實現接口聲明的所有方法。除了這個典型的用法以外,我們在繼承中也可能會在子類覆蓋父類中的方法。在覆蓋要注意以下的幾點:
1、覆蓋的方法的標誌必須要和被覆蓋的方法的標誌完全匹配,才能達到覆蓋的效果;
2、覆蓋的方法的返回值必須和被覆蓋的方法的返回一致;
3、覆蓋的方法所拋出的異常必須和被覆蓋方法的所拋出的異常一致,或者是其子類;
4、被覆蓋的方法不能爲private,否則在其子類中只是新定義了一個方法,並沒有對其進行覆蓋。
overload對我們來說可能比較熟悉,可以翻譯爲重載,它是指我們可以定義一些名稱相同的方法,通過定義不同的輸入參數來區分這些方法,然後再調用時,VM就會根據不同的參數樣式,來選擇合適的方法執行。在使用重載要注意以下的幾點:
1、在使用重載時只能通過不同的參數樣式。例如,不同的參數類型,不同的參數個數,不同的參數順序(當然,同一方法內的幾個參數類型必須不一樣,例如可以是fun(int,float),但是不能爲fun(int,int));
2、不能通過訪問權限、返回類型、拋出的異常進行重載;
3、方法的異常類型和數目不會對重載造成影響;
4、對於繼承來說,如果某一方法在父類中是訪問權限是priavte,那麼就不能在子類對其進行重載,如果定義的話,也只是定義了一個新方法,而不會達到重載的效果
interface People
{
void speakName();
void speakDoing();
}
class juan implements People
{
public void speakName()
{
System.out.println("I'am juan");
}
public void speakDoing()
{
System.out.println("watching TV");
}
}
class peng implements People
{
public void speakName()
{
System.out.println("I'am peng");
}
public void speakDoing()
{
System.out.println("eating fan");
}
}
class onepeople
{
public void say( People p)
{
p.speakName();
p.speakDoing();
}
}
class assember
{
public static void main(String [] args)
{
juan juan = new juan();
peng peng= new peng();
onepeople one= new onepeople();
one.say(juan);
one.say(peng);
one.say(new People(){
public void speakName()
{
System.out.println("test1");
}
public void speakDoing()
{
System.out.println("test2");
}
}
);
}
}