Overload
顧名思義,就是Over(重新)——load(加載),所以中文名稱是重載。它可以表現(xiàn)類的多態(tài)性,可以是函數(shù)里面可以有相同的函數(shù)名但是參數(shù)名、類型不能相同;或者說可以改變參數(shù)、類型但是函數(shù)名字依然不變。
重載需要注意以下幾點:
1.重載是通過不同的方法參數(shù)來區(qū)分的。
2.不能通過方法的訪問權(quán)限、返回值和異常類型來進(jìn)行重載。
3.對于繼承來說,如果基類方法的訪問權(quán)限是private,就不能在派生類中對其進(jìn)行重載。如果派生類中也定義了一個同名的函數(shù),這只是一個新的方法,不會達(dá)到重載的效果。
Override
就是ride(重寫)的意思,在子類繼承父類的時候子類中可以定義某方法與其父類有相同的名稱和參數(shù),當(dāng)子類在調(diào)用這一函數(shù)時自動調(diào)用子類的方法,而父類相當(dāng)于被覆蓋(重寫)了。
重寫需要注意一下幾點:
1.派生類中的覆蓋方法必須和基類中被覆蓋的方法有相同的的函數(shù)名和參數(shù)。
2.派生類中的覆蓋方法的返回值必須和基類中被覆蓋的方法的返回值相同。
3.派生類中的覆蓋方法所拋出的異常必須和基類中被覆蓋的方法所拋出的異常一致。
4.基類中被覆蓋的方法不能是private,否則子類只是定義一個方法,并沒有對其覆蓋。
方法的重寫Overriding和重載Overloading是Java多態(tài)性的不同表現(xiàn)。重寫Overriding是父類與子類之間多態(tài)性的一種表現(xiàn),重載Overloading是一個類中多態(tài)性的一種表現(xiàn)。如果在子類中定義某方法與其父類有相同的名稱和參數(shù),我們說該方法被重寫 (Overriding)。子類的對象使用這個方法時,將調(diào)用子類中的定義,對它而言,父類中的定義如同被“屏蔽”了。如果在一個類中定義了多個同名的方法,它們或有不同的參數(shù)個數(shù)或有不同的參數(shù)類型,則稱為方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類型。
區(qū)別
- 覆蓋是子類和父類之間的關(guān)系,是垂直關(guān)系。重載是同一個類中的方法之間的關(guān)系,是水平關(guān)系。
- 覆蓋只能由一個方法或只能由一對方法產(chǎn)生關(guān)系。重載是多個方法之間的關(guān)系。
- 覆蓋要求 參數(shù)列表相同。重載要求參數(shù)列表不同。