一.重載
重載(Overloading):
(1) 方法重載是讓類以統一的方式處理不同類型資料的一種手段。多個同名函數同時存在,具有不同的參數個數/類型。重載Overloading是一個類中多態性的一種表現。 (2) Java的方法重載,就是在類中可以建立多個方法,它們具有相同的名字,但具有不同的參數和不同的定義。調用方法時通過傳遞給它們的不同參數個數和參數類型來決定具體使用哪個方法, 這就是多態性。 (3) 重載的時候,方法名要一樣,但是參數類型和個數不一樣,傳回值類型可以相同也可以不相同。無法以返回型別作為重載函數的區分標準.
二.重寫
重寫(Overriding):
(1) 父類與子類之間的多態性,對父類的函數進行重新定義。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫 (Overriding)。在Java中,子類可繼承父類中的方法,而不需要重新編寫相同的方法。但有時子類並不想原封不動地繼承父類的方法,而是想作一定的修改,這就需要採用方法的重寫。方法重寫又稱方法覆蓋。 (2)若子類中的方法與父類中的某一方法具有相同的方法名、傳回型別和參數表,則新方法將覆蓋原有的方法。如需父類中原有的方法,可使用super關鍵字,該關鍵字引用了當前類的父類。 (3)子類函數的訪問修飾許可權不能少於父類的;
重寫和重載的方法的規則:
重寫方法的規則:1、參數列表必須完全與被重寫的方法相同,否則不能稱其為重寫而是重載。2、返回的類型必須一直與被重寫的方法的傳回型別相同,否則不能稱其為重寫而是重載。3、存取修飾詞的限制一定要大於被重寫方法的存取修飾詞(public>protected>default>private)4、重寫方法一定不能拋出新的檢查異常或者比被重寫方法申明更加寬泛的檢查型異常。例如:父類的一個方法申明了一個檢查異常IOException,在重寫這個方法是就不能拋出Exception,只能拋出IOException的子類異常,可以拋出非檢查異常。 而重載的規則:1、必須具有不同的參數列表;2、可以有不責罵的傳回型別,只要參數列表不同就可以了;3、可以有不同的存取修飾詞;4、可以拋出不同的異常; 重寫與重載的區別在於:重寫多態性起作用,對調用被重載過的方法可以大大減少代碼的輸入量,同一個方法名只要往裡面傳遞不同的參數就可以擁有不同的功能或傳回值。用好重寫和重載可以設計一個結構清晰而簡潔的類,可以說重寫和重載在編寫代碼過程中的作用非同一般.
三:final
根據程式上下文環境,Java關鍵字final有“這是無法改變的”或者“終態的”含義,它可以修飾非抽象類別、非抽象類別成員方法和變數。你可能出於兩種理解而需要阻止改變:設計或效率。 final類不能被繼承,沒有子類,final類中的方法預設是final的。final方法不能被子類的方法覆蓋,但可以被繼承。 final成員變數表示常量,只能被賦值一次,賦值後值不再改變。 final不能用於修飾構造方法。 注意:父類的private成員方法是不能被子類方法覆蓋的,因此private類型的方法預設是final類型的。
四:this
說明在什麼情況下需要用到this:
第一、通過this調用另一個構造方法,用法是this(參數列表),這個僅僅在類的構造方法中,別的地方不能這麼用。第二、函數參數或者函數中的局部變數和成員變數同名的情況下,成員變數被屏蔽,此時要訪問成員變數則需要用“this.成員變數名”的方式來引用成員變數。當然,在沒有同名的情況下,可以直接用成員變數的名字,而不用this,用了也不為錯,呵呵。第三、在函數中,需要引用該函所屬類的當前對象時候,直接用this。
五:super
super關鍵和this作用類似,是被屏蔽的成員變數或者成員方法或變為可見,或者說用來引用被屏蔽的成員變數和成員成員方法。不過super是用在子類中,目的是訪問直接父類中被屏蔽的成員,注意是直接父類(就是類之上最近的超類)。第一、在子類構造方法中要調用父類的構造方法,用“super(參數列表)”的方式調用,參數不是必須的。同時還要注意的一點是:“super(參數列表)”這條語句只能用在子類構造方法體中的第一行。第二、當子類方法中的局部變數或者子類的成員變數與父類成員變數同名時,也就是子類局部變數覆蓋父類成員變數時,用“super.成員變數名”來引用父類成員變數。當然,如果父類的成員變數沒有被覆蓋,也可以用“super.成員變數名”來引用父類成員變數,不過這是不必要的。第三、當子類的成員方法覆蓋(重寫)了父類的成員方法時,也就是子類和父類有完全相同的方法定義(但方法體可以不同),此時,用“super.方法名(參數列表)”的方式訪問父類的方法。