一,Java類的繼承
1,為什麼要繼承?
答:通過繼承可以使對對象的描述更加清晰,可以實現代碼的複用,可以實現重寫類中的變數或方法,可以實現在無原始碼的情況下修改被繼承的類。
2,Java的類如何?繼承?
答:Java類的繼承是單一的,也是完全繼承的。通過關鍵詞extends關鍵字來實現。被繼承的類稱為父類,繼承父類的類稱為子類。繼承文法:public calss classname extends superclassname.因為Java類的繼承是單一的,所以extends後面只能指定一個父類。而完全繼承則是指“一個類繼承了父類的所有成員變數和成員方法。
例:在l類1中的平面座標系統中設定x和y,當要再定義一個空間座標系的時候只需繼承類1,再在其子類中添加一個z軸就行了。
public class one{ int x; int y; public one(){ x = 0; y = 0; }}
然後再定義類2,通過類2繼承類1:
public class two extends one{ //繼承類one int z; public one(){ z = 0; }}
這樣就實現了類的繼承。
3,類繼承中的隱藏/覆蓋/重載是怎麼樣的?
答:(1)類的隱藏:隱藏發生在子類和父類之間,針對父類中成員變數和靜態方法而言的。當子類中聲明與父類中聲明的成員變數名相同時,則實現了對父類成員變數的隱藏。
(2)類的覆蓋:覆蓋也是發生在子類和父類之間,是指在子類中聲明一個與父類具有相同的方法名/輸入參數列表/傳回值/存取權限等的方法,除過方法體不同外。在子類中重新編寫方法實現的功能。常被用於替換父類相同的方法,實現功能的更新。
例:
class three{ public void Display(){ //定義父類中Display方法 System.out.println("This is class three"); }}class four extends three{ //繼承類three public void Display(){ //覆蓋父類three中的Display方法 System.out.println("This is class four"); }}
(3)類的重載:可發生在父類與子類之間,也可發生在同一類中。是指在子類與父類之間或同一類中定義多個具有相同方法名/存取權限等的方法。
例:
class five{ public void Display(){ //父類中Display方法 System.out.println("this is class five"); }}class six extends five{ //繼承類five public void Display(String s){ //沖在父類中Display方法 System.out.println(s); }}public class seven{ public static void main(String[] args){ six a = new six(); a.Display(); //調用父類中Display方法 a.Display("this is class six"); //調用子類中Display方法 }}
4,構造方法的重載.
在上例中 six a = new six();new後面是調用類的構造方法,如果當類沒有構造方法的時候,建立類對象時調用無任何操作的預設構造方法。當子類有自身的無形式列表的構造方法時,建立對象時,會先建立父類的對象,再建立子類的對象。
如下面代碼:
//第一個類-------父類public class Output{ public Output(){ System.out.println("This is class Output"); }}//第二個類-------子類public class Input extends Output{ public Input(){ System.out.println("This is class Input"); }}//第三個類public class sample{ public static void main(String[] args){ Input a = new Input(); }}
上面代碼最後輸出為:
This is class Output
This is class Input
可見最後如果沒有構造方法,建立對象後會先調用父類對象,後調用子類對象。