繼承是多態的前提,若是沒有繼承,就沒有多態。ide
繼承主要解決的問題:共性抽取。this
特色:對象
1).子類能夠擁有父類的內容。繼承
2).子類還能夠擁有本身的內容。編譯
定義父類的格式:和一個普通類的定義格式同樣。class
定義子類的格式:變量
public class 子類名 extends 父類名 { }擴展
在父子類繼承關係中,若是成員變量重名,則建立子類對象時,訪問方式有兩種:
1).直接經過子類對象訪問成員變量。在定義對象時,等號左邊是誰,訪問變量時就優先用誰的變量,若是沒有,便向上找,若所有沒有則編譯報錯。權限
2).間接經過成員方法訪問成員變量。其中,成員方法屬於誰,就用誰,沒有就往上找。方法
在父子類繼承關係中,建立子類對象,訪問成員方法的規則:建立對象是誰,就優先用誰,若是沒有,就往上找。
注意:不管是成員變量仍是成員方法,若在本類中沒有都是往上找,毫不會向下找。
局部變量 本類變量 父類變量
直接寫成員變量 this.變量名 super.父類成員變量名
在父子類繼承關係中,建立子類對象,訪問成員方法的規則:建立對象是誰,就優先用誰,若是沒有,就往上找。
注意:不管是成員變量仍是成員方法,若在本類中沒有都是往上找,毫不會向下找。
重寫,指在繼承關係中,方法的名稱同樣,參數列表也同樣。
注意區分重寫與重載:
重寫:方法名同樣,參數列表也同樣。
重載:方法名同樣,可是參數列表不同。
方法重寫的特色:建立的是子類對象,則優先用子類方法。
注意事項:
1).必須保證父子類之間的方法名稱和參數列表相同,能夠經過在前面加註解@Override驗證是否正確重寫了,但不寫註解也是正確的。
2).子類方法的返回值必須小於等於父類方法返回值的範圍。
(擴展:Java.lang.Object類是全部類的公共最高父類)
3).子類方法的權限必須大於等於父類方法的權限修飾符
(擴展:權限修飾詞:public>protected>(default)>private。備註:default不是關鍵字,而是什麼都不寫,留空)
覆蓋重寫的使用原則:對已使用的類,儘可能不要重寫去定義一個新類,而應該對原來的類進行更新修改。
特色:
1).子類構造方法當中有一個默認隱含的「super()」調用,因此必定是先調用父類構造,後執行子類構造。
2).能夠經過super關鍵字在子類構造重載調用父類構造。
3).super的構造調用必須是子類構造方法的第一個語句。即,不能一個子類構造調用屢次super構造。
1).在子類的成員方法中,訪問父類的成員變量。
2).在子類的成員方法中,訪問父類的成員方法。
3).在子類的構造方法中,訪問父類的構造方法。
super關鍵字用於訪問父類內容,this關鍵字用於訪問本類的內容。
this用法:
1).在本類成員方法中,訪問本類的成員變量。
2).在本類成員方法中,訪問本類的成員方法。
3).在本類構造方法中,訪問本類的另外一個構造方法。注意,this在調用的也必須是構造方法中的第一個語句,也是惟一一個。
注意:this和super這兩種構造調用,不能同時使用。
1).Java語言是單繼承的,一個類的直接父類只能有惟一一個。
2).Java語言能夠多級繼承。
3).Java中最高父類是Java.lang.Object
一個子類的直接父類是惟一的,但一個父類能夠有不少個子類,子類之間爲兄弟類關係。
若是父類中的方法不肯定如何進行方法體的實現,那麼這就是一個抽象方法。
抽象方法:加上abstract關鍵字,而後去掉大括號直接分號結束。
抽象類:抽象方法所在的類必須是抽象類才行,在class以前加上abstract便可。
1).對抽象類,不能直接建立抽象類對象。
2).必須使用一個子類繼承抽象父類。
3).子類必須覆蓋重寫抽象父類當中全部的抽象方法。
覆蓋重寫(實現):子類去掉抽象方法的abstract關鍵字,而後補上方法體大括號。
4).建立子類對象進行使用。
注意事項:
1).抽象類不能直接建立抽象類對象。
2).抽象類中,能夠有構造方法,是供子類建立對象時,初始化父類成員使用。
3).抽象類中,不必定包含抽象方法,但又抽象方法的必定時抽象類。
4).抽象類的子類,必須是重寫抽象父類中全部的抽象方法,不然,編譯沒法經過而報錯,除非該子類也是抽象類。