java學習之重載和重寫

重載: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");

}

}

);

}

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章