Java基礎之005-繼承
35歲學習Java
1 繼承1.1 繼承的概述1) 多個類中存在相同屬性和行為時,將這些內容抽取到單獨一個類中,那麼多個類無需再定義這些屬性和行為,只要繼那個類即可。2) 多個類可以稱為子類,單獨這個類稱為父類或者超類。3) 子類可以直接存取父類中的非私人的屬性和行為。4) 通過extends關鍵字讓類與類之間產生繼承關係。class SubDemo extends Demo{}5) 繼承的出現提高了代碼的複用性。6) 繼承的出現讓類與類之間產生了關係,提供了多態的前提。 1.2 繼承的特點1) Java只支援單繼承,不支援多繼承,通過另一個方式體現。一個類只能有一個父類,不可以有多個父類。class SubDemo extends Demo{} //okclass SubDemo extends Demo1,Demo2...//error2) Java支援多層繼承(繼承體系)class A{}class B extends A{}class C extends B{}3) 定義繼承需要注意:不要僅為了擷取其他類中某個功能而去繼承類與類之間要有所屬( " is a " )關係,xx1是xx2的一種。1.3 super關鍵字1) super和this的用法相像2) this代表本類對象的引用3) super代表父類的記憶體空間的標識。4) 當子父類出現同名成員時,可以用super進行區分5) 子類要調用父類建構函式時,可以使用super語句。1.4 函數覆蓋(Override)1) 子類中出現與父類一模一樣的方法時,會出現覆蓋操作,也稱為重寫或者複寫。2) 父類中的私人方法不可以被覆蓋。3) 在子類覆蓋方法中,繼續使用被覆蓋的方法可以通過super.函數名擷取。4) 覆蓋注意事項:覆蓋時,子類方法許可權一定要大於等於父類方法許可權靜態只能覆蓋靜態。5) 覆蓋的應用:當子類需要父類的功能,而功能主體子類有自己特有內容時,可以複寫父類中的方法,這樣,即沿襲了父類的功能,又定義了子類特有的內容。1.5 子類的執行個體化過程1) 子類中所有的建構函式預設都會訪問父類中空參數的建構函式2) 因為每一個建構函式的第一行都有一條預設的語句super();3) 子類會具備父類中的資料,所以要先明確父類是如何對這些資料初始化的。4) 當父類中沒有空參數的建構函式時,子類的建構函式必須通過this或者super語句指定要訪問的建構函式。1.6 final關鍵字1) final可以修飾類,方法,變數。2) final修飾的類不可以被繼承。3) final修飾的方法不可以被覆蓋。4) final修飾的變數是一個常量。只能被賦值一次。5) 內部類只能訪問被final修飾的局部變數。 1.7 抽象類別1.7.1抽象類別概述1) 抽象定義:抽象就是從多個事物中將共性的,本質的內容抽取出來。例如:狼和狗共性都是犬科,犬科就是抽象出來的概念。2) 抽象類別:Java中可以定義沒有方法體的方法,該方法的具體實現由子類完成,該方法稱為抽象方法,包含抽象方法的類就是抽象類別。3) 抽象方法的由來:多個對象都具備相同的功能,但是功能具體內容有所不同,那麼在抽取過程中,只抽取了功能定義,並未抽取功能主體,那麼只有功能聲明,沒有功能主體的方法稱為抽象方法。例如:狼和狗都有吼叫的方法,可是吼叫內容是不一樣的。所以抽象出來的犬科雖然有吼叫功能,但是並不明確吼叫的細節。1.7.2抽象類別的特點1) 抽象類別和抽象方法必須用abstract關鍵字來修飾。2) 抽象方法只有方法聲明,沒有方法體,定義在抽象類別中。格式:修飾符abstract 傳回值類型 函數名(參數列表) ;3) 抽象類別不可以被執行個體化,也就是不可以用new建立對象。原因如下:抽象類別是具體事物抽取出來的,本身是不具體的,沒有對應的執行個體。例如:犬科是一個抽象的概念,真正存在的是狼和狗。而且抽象類別即使建立了對象,調用抽象方法也沒有意義。4) 抽象類別通過其子類執行個體化,而子類需要覆蓋掉抽象類別中所有的抽象方法後才可以建立對象,否則該子類也是抽象類別。1.8 介面1) 格式: interface 介面名{}2) 介面中的成員修飾符是固定的。成員常量:public static final成員函數:public abstract發現介面中的成員都是public的。3) 介面的出現將“多繼承”通過另一種形式體現出來,即“多實現”。 1.8.1 介面的特點1) 介面是對外暴露的規則。2) 介面是程式的功能擴充。3) 介面的出現降低耦合性。4) 介面可以用來多實現。5) 類與介面之間是實現關係,而且類可以繼承一個類的同時實現多個介面。6) 介面與介面之間可以有繼承關係。1.8.2 介面與抽象類別
1.9 多態1) 定義:某一類事物的多種存在形態。例:動物中貓,狗。貓這個對象對應的類型是貓類型貓 x = new 貓();同時貓也是動物中的一種,也可以把貓稱為動物。動物 y = new 貓();動物是貓和狗具體事物中抽取出來的父類型。父類型引用指向了子類對象。2) 程式中體現:父類或者介面的引用指向或者接收自己的子類對象。3) 好處和作用:多態的存在提高了程式的擴充性和後期可維護性4) 前提:需要存在繼承或者實現關係要有覆蓋操作5) 多態的特點成員函數:編譯時間:要查看引用變數所屬的類中是否有所調用的成員。在運行時:要查看對象所屬的類中是否有所調用的成員。成員變數:只看引用變數所屬的類。1.10 內部類1) 將一個類定義在另一個類的裡面,對裡面那個類就稱為內部類(內建類,嵌套類)。2) 訪問特點:內部類可以直接存取外部類中的成員,包括私人成員。而外部類要訪問內部類中的成員必須要建立內部類的對象。3) 內部類定義在成員位置上可以被private static成員修飾符修飾。被static修飾的內部類只能訪問外部類中的靜態成員。4) 內部類定義在局部位置上也可以直接存取外部類中的成員。同時可以訪問所在局部中的局部變數,但必須是被final修飾的。5) 匿名內部類就是內部類的簡化寫法。前提:內部類可以繼承或實現一個外部類或者介面。格式為:new 外部類名或者介面名(){ 覆蓋類或者介面中的代碼,( 也可以自訂內容。)}簡單理解:就是建立一個帶內容的外部類或者介面的子類匿名對象。6) 什麼時候使用匿名內部類呢?通常在使用方法是介面型別參數,並該介面中的方法不超過三個時,可以將匿名內部類作為參數傳遞。增強閱讀性。