解決了程序的擴展問題。
一、方法覆蓋(方法重寫)
1、方法覆蓋(方法重寫)
在類的繼承體系結構中,如果子類中出現(xiàn)了與父類中有同原型的方法,那么認為子類中的方法覆蓋了父類中的方法(也稱為方法重寫);
通過子類的實例調用被覆蓋的方法時,將總是調用子類中的方法,而父類中的方法將被隱藏。

舉例
2、方法覆蓋(方法重寫)和方法重載的區(qū)別
- 方法覆蓋出現(xiàn)的前提條件之一是必須有繼承發(fā)生的情況下,而且要求父類和子類中的方法必須同原型;
- 方法重載時,繼承并不是必需的,它只要求方法名稱相同,而參數(shù)列表則必須不同,換言之,各方法的原型其實是不同的。

方法重載

方法覆蓋/重寫

方法重載

方法重寫
二、引用轉型
基類的引用可以指向派生類的對象,如:
BaseClass obj = new DerivedClass();
但是派生類的引用則不可以指向基類的對象,如:
DerivedClass obj = new BaseClass();
這樣的語句將引發(fā)錯誤。

示例
三、多態(tài)
同一個對象,使用方法體現(xiàn)出不同的結果。
同一個實現(xiàn)接口,使用不同的實例而執(zhí)行不同操作。
父類的引用指向哪個類的實例就調用哪個類中的方法;
同樣是使用父類的引用,調用同一個名稱的方法,卻可以得到不同的調用結果,這就是Java中的多態(tài),即:同一函數(shù),多種形態(tài)。

1、靜態(tài)多態(tài)(方法重載)
- 靜態(tài)多態(tài)也稱為編譯時多態(tài),即在編譯時決定調用哪個方法;
- 靜態(tài)多態(tài)一般是指方法重載;
只要構成了方法重載,就可以認為形成了靜態(tài)多態(tài)的條件; - 靜態(tài)多態(tài)與是否發(fā)生繼承沒有必然聯(lián)系。
2、動態(tài)多態(tài)(方法重寫)
- 動態(tài)多態(tài)也稱為運行時多態(tài),即在運行時才能確定調用哪個方法;
- 形成動態(tài)多態(tài)必須具備以下條件:
1.必須要有繼承的情況存在;
2.在繼承中必須要有方法覆蓋;
3.必須由基類的引用指向派生類的實例,并且通過基類的引用調用被覆蓋的方法;
由上述條件可以看出,繼承是實現(xiàn)動態(tài)多態(tài)的首要前提。
3、抽象類和接口
四、final關鍵字
final:最終的,不可修改的。

final修飾變量、方法和類
1、final修飾變量
如果將某個變量修飾為final,那么該變量就成為常量,常量在聲明時必須初始化。
一般語法:
[訪問權限] final 數(shù)據(jù)類型 常量名 = 值;
final double PI = 3.14159;
PI成為常量,其后任何試圖對PI進行賦值的語句都將報錯;
2、final修飾方法
如果將某個成員方法修飾為final,則意味著該方法不能被子類覆蓋。如果在派生類中出現(xiàn)同原型的方法,將會報錯。
一般語法:
[訪問權限] final 返回值類型 方法名(參數(shù)列表) {
……
}
public final void fun() {
……
}
3、final修飾類
如果將某個類修飾為final,則說明該類無法被繼承,任何類想繼承于該類都將報錯。
一般語法:
[訪問權限] final class 類名 {
成員列表
}
public final class MyClass {
……
}