Java 繼承學習資料

繼承相關的概念
什麼是繼承
父類、子類
子類繼承父類的成員屬性或者成員方法,子類通過繼承可以獲得父類的屬性和方法
在java中只支持單繼承,一個子類只能有一個父類.一個父類可以有多個子類.
c==>b==>a
繼承的好處
提高代碼的重用性
提高代碼的擴展性和靈活性

繼承的具體實現
1>將多個子類的共同特徵和行爲進行抽取,提升出一個父類
2>自定定義的時候通過使用extends關鍵字繼承父類,這樣子類就獲得了父類的屬性和方法
public class 子類   extends 父類{

}

父類不能夠被子類繼承的
1>private私有的成員屬性和方法
2>父類的構造函數


方法重寫以及注意的事項
回顧:方法重載
前提:在同一個類中的方法,
具備的條件:1>方法名相同 2>參數列表(參數個數或者參數類型不一致) 注意:與方法的返回值類型無關

方法重寫(覆蓋)
前提:繼承關係的情況下
當子類不滿足從父類繼承下來的方法的時候,對父類繼承下來的方法進行重寫(重新定義)

需要注意的事項
1>子類重寫父類的方法,必須保證方法名和參數列表要一致,還要保證方法返回值類型一致
2>被重寫的方法,在子類中的訪問權限和父類中的訪問權限可以不一致,但是子類重寫的方法
訪問修飾符的權限不能比父類方法的訪問權限小
3>子類重寫的方法不能比父類方法拋出更多的異常
比如:父類
protected void teaching()

子類重寫
protected void teaching()throws Excepiton //ERROR


super關鍵字以及注意事項
回顧:this關鍵字,代表當前對象引用
super是表示子類對父類對象的引用

super是哪來的?父類對象是怎麼來的
當創建子類對象的時候,由於子類對象一旦創建,就會把父類對象的屬性和方法繼承下來。
所以JVM首先會自動創建父類對象,然後在創建子類對象
先會調用父類的構造函數創建對象,然後調用子類的構造函數.
JVM調用父類默認構造函數(無參的).super是jvm提供給子類對象對父類對象進行操作的一個父類對象的引用

super的使用
1>調用父類的構造函數
注意:在子類的構造函數中默認會調用父類的無參構造函數,在子類的構造函數中自動隱藏super()
     解決:1>如果父類沒有無參的構造函數,可以明確在子類構造函數中調用父類存在的構造函數
         super();super(參數列表);
        2>在父類中儘量提供一個無參構造函數,以便給子類的構造函數中調用
       
 在子類的構造函數中,不能同時出現this和super調用構造函數
 
 2>調用父類的方法
   super.方法
 3>使用父類對象的成員屬性
  super.屬性名
       
-------------------------
多態特性
一個事務具備多種不同的形態,動物這一事務既可以是肉食動物也可是草食動物
例子:對教員進行面試行爲
//面試java教員
public static void testTeacher(JavaTeacher teacher)
 {
  System.out.println("面試開始");
  teacher.introduce();
  teacher.teaching();
 }
 //面試.net教員
 public static void testTeacher(NetTeacher teacher)
 {
  System.out.println("面試開始");
  teacher.introduce();
  teacher.teaching();
 }
由於Java教員和net教員都屬於教員,教員這一個事物有兩種形態:JavaTeacher和NetTeacher(程序中的多態)
利用多態可以提高代碼的擴展性和靈活性
public static void testTeacher(Teacher teacher)
 {
  System.out.println("面試開始");
  teacher.introduce();
  teacher.teaching();
 }
子類對象可以自動轉型爲父類類型
子類類型   p1=new 子類();
父類類型   p2=p1;//自動轉型
通過p2調用的方法或者是使用的成員屬性,都是子類對象的,而不是父類的

父類對象轉子類類型,要進行強制轉換。但是運行的時候,轉型可能會失敗

繼承本質:考慮子類和父類是否存在正確的繼承關係.子類對象 is a 父類類型

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章