在我們剛開始學習Java時在分别學習Java中的重載與重寫時當時我相信每一個人都會掌握的很牢固,可是随着時間的流逝,記憶的模糊,于是乎人們對于重寫和重載就反了迷糊。
概念
Java的重寫:
重寫發生在子類和父類中,即子類對父類的允許通路的方法實作重寫編寫的過程,但是在編寫過程中傳回值和形參都不能改變,即外殼不變,核心重寫。
重寫的好處就是子類根據自己的需要,定義特定于屬于自己的行為,即子類能根據自己的需要實作父類的方法。
重寫方法不能抛出新的檢查異常或者比被重寫方法申明更加寬泛的異常。
例如父類中的一個方法聲明為一個IOException的異常,而他的子類繼承了這個方法在重寫這個方法時不能抛出比IOException更加寬泛的異常比如它的父類Exception,而是隻能抛出IOException的子類異常。
Java的重載:
重載是在一個類中,即在一個類中方法名字相同,而參數不同,傳回值可以相同也可以不相同。
每個重載的方法都必須要有一個獨一無二的參數類型清單。最常用的是構造器的重載。
規則
重寫的規則: 1):參數清單必須完全與被重寫方法的相同; 2):傳回類型必須完全與被重寫方法的傳回類型相同; 3):通路權限不能比父類中被重寫的方法的通路權限更低。(例如父類的方法是public,子類就不能是private、protected,而必須是public); 4):方法的重寫隻能發生在父類和子類中。子類重寫父類的方法; 5):當父類有方法聲明為final時子類不能對其進行重寫; 6):當父類有方法聲明為static時子類不能對其進行重寫,隻能夠被再次聲明; 7): 子類和父類在同一個包中,那麼子類可以重寫父類所有方法,除了聲明為private和final的方法; 8):子類和父類不在同一個包中,那麼子類隻能夠重寫父類的聲明為public和protected的非final方法;
· 9):重寫的方法能夠抛出任何非強制異常,無論被重寫的方法是否抛出異常。但是,重寫的方法不能抛出新的強制性異常,或者比被重寫方法聲明的更廣泛的強制性異常,反之則可以;
10):構造方法不能被重寫;
11): 如果不能繼承一個方法,則不能重寫這個方法。
重載的規則:
1):被重載的方法必須改變參數清單(參數個數或類型或順序不一樣);
· 2):被重載的方法可以改變傳回類型;
· 3):被重載的方法可以改變通路修飾符;
· 4):被重載的方法可以聲明新的或更廣的檢查異常;
· 5):方法能夠在同一個類中或者在一個子類中被重載;
· 6):無法以傳回值類型作為重載函數的區分标準。