一,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
可見最后如果沒有構造方法,創建對象后會先調用父類對象,后調用子類對象。
