覆蓋”指的是重新定義基類的方法,使得該方法在衍生類別中有著不同的含義。“重載”指的是賦予方法名兩個定義,解析出來有不同的參數列表。重載可以存在於任何類中,不管定義類時是否明確指定了基類。
下面解釋如何區分他們:“覆蓋”方法定義時,衍生類別中給出的新方法定義擁有完全一樣的參數數目及類型;另一方面,假如衍生類別的方法擁有不同的參數數目,或者假如某個參數類型不同於基類中的地,則衍生類別會擁有這兩人方法。這時就是“重載”。重載時也可以不涉及到基類,只要在類定義中同時給出兩個方法定義即可。
覆蓋和重載的區別
override:覆蓋,它是覆蓋了一個方法並且對其重寫,以求達到不同的作用。對我們來說最熟悉的覆蓋 就是對介面方法的實現, 在介面中一般只是對方法進行了聲明,而我們在實現時,就需要 實現介面聲明的所有方法。除了這個典型的用法以外,我們在繼承中也可能會在子類覆蓋 父類中的方 法。 在覆蓋要注意以下的幾點: 1、覆蓋的方法的標誌必須要和被覆蓋的方法的標誌完全符合,才能達到覆蓋的效果; 2、覆蓋的方法的傳回值必須和被覆蓋的方法的返回一致; 3、覆蓋的方法所拋出的異常必須和被覆蓋方法的所拋出的異常一致,或者是其子類; 4、被覆蓋的方法不能為private,否則在其子類中只是新定義了一個方法,並沒有對其進行覆蓋。 overload:重載,它是指我們可以定義一些名稱相同的方法,通過定義不同的輸入參數來區分這些方 法,然後再調用時,VM就會根據不同的參數樣式,來選擇合適的方法執行。在使用重載要 注意以下的幾點: 1、在使用重載時只能通過不同的參數樣式。例如,不同的參數類型,不同的參數個數,不同的參順 序(當然,同一方法內的幾個參數類型必須不一樣; 2、不能通過存取權限、傳回型別、拋出的異常進行重載; 3、方法的異常類型和數目不會對重載造成影響; 4、對於繼承來說,如果某一方法在父類中是存取權限是priavte,那麼就不能在子類對其進行重載,如 果定義的話,也只是定義了一個新方法,而不會達到重載的效果。 |