子類擴充套件了父類,大部分的時候,子類總是以父類為基礎,額外的增加新的成員變數和方法。但是有一種情況例外:子類需要重寫父類的方法。比如說鳥類birds都有飛翔fly()「自由自在地飛」的本領,鴕鳥ostrich是鳥類的子類,但鴕鳥不會飛翔,這個時候就需要重寫birds的方法fly()方法為「不會飛,地上跑」。
當子類中包含與與父類同名方法的現象被稱為方法重寫(override),也被稱為方法覆蓋。
方法的重寫要遵循「兩同兩小一大」規則,「兩同」即方法相同、形參列表相同;「兩小」指的是子類方法返回型別應該比父類方法返回值型別更小或相等,子類方法宣告丟擲的異常類應比父類方法宣告丟擲的異常類更小或相等;「一大」子類方法的訪問許可權應比父類方法的訪問許可權更大或相等。
注意:覆蓋方法和被覆蓋方法要麼都是類方法,要麼都是例項方法,不能乙個是類方法,乙個是例項方法。
當子類覆蓋了父類的方法後,子類的物件將無法呼叫父類中的被覆蓋的方法,但可以在子類方法中呼叫父類被覆蓋的方法。如果需要在子類中呼叫父類中被覆蓋的方法,則可以使用super(被覆蓋的例項方法)或者父類類名(被覆蓋的類方法)作為呼叫父類中被覆蓋的方法。
如果父類方法具有private訪問許可權,則該方法對其子類是隱藏的,因此其子類無法訪問該方法,也就是無法重寫該方法。如果子類中定義了乙個與父類private方法具有相同的方法名、相同引數列表、相同返回值型別的方法,依然不是重寫,只是在子類中重新定義了乙個新方法。
會有面試官問過載和重寫的區別,但其實把兩者放在一起比較是沒有太大意義的,因為過載主要發生在同乙個類的多個同名方法之間,而重寫發生在子類和父類的同名方法之間。他們之間的聯絡除了二者都是發生在方法之間,並要求方法同名以外,沒有太大相似之處。當然,父類和子類之間也可以發生過載,因為子類獲得了父類的方法,如果子類定義了乙個與父類方法同名但引數列表不同的方法,就會形成父類方法和子類方法的過載。
Java基礎語法(六) 方法過載
一 方法過載的基本使用 1 方法的過載,多個方法的名稱一樣,但是引數列表不一樣 2 好處 只需要記住唯一乙個方法名稱,就可以實現類似的多個功能 public class demo01methodoverload public static int sum int a,int b public sta...
05 方法重寫
在繼承關係中,子類如果定義了乙個與父類方法簽名完全相同的方法,被稱為覆寫 override 加上 override可以讓編譯器幫助檢查是否進行了正確的覆寫。例如,在person類中,我們定義了run 方法 class person 在子類student中,覆寫這個run 方法 class stude...
Java基礎》5 方法
僅供自己記錄學習,無它用,歡迎指導!定義乙個方法的格式 public static void 方法名稱 方法名稱的命名規則和變數一樣,使用小駝峰。方法體 也就是大括號當中可以包含任意條語句。注意事項 1.方法定義的先後順序無所謂。2.方法的定義不能產生巢狀包含關係。3.方法定義好了之後,不會執行的,...