------- <a href="http://www.itheima.com" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="blank">android教育訓練</a>、<a href="http://www.itheima.com" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="blank">java教育訓練</a>、期待與您交流! ----------
學習内容:繼承的概述;繼承出現後子父類中成員的特點;final關鍵字;抽象類;接口;模闆方法設計模式
一、繼承的概述 1,繼承的好處 1),提高了代碼的複用性 2),繼承的出現,讓類與類之間産生了關系。有了這個關系,才有了面向對象的多态的這個特性。 特别要說明一點:千萬不要為了獲得其他類的功能簡化代碼而繼承,必須是類與類之間有所屬關系才可以繼承。即不要有奶就是娘。 2,java中繼承的特點 java語言中,java隻支援單繼承,支援多層繼承,但不支援多繼承。因為多繼承容易帶來安全隐患,當功能名稱相同而内容不同時,子類對象不确定運作哪一個。java為了解決java對多繼承不支援的問題,挺了另外一種方式來完成---多實作。 二、繼承出現後子父類中成員的特點 1,成員變量 如果子父類中出現非私有的同名變量時,子類要通路本類中的變量,用this關鍵字,子類要通路父類中的變量,要用super關鍵字。super的使用基本上和this的使用幾乎一緻,this代表的是本類對象的引用,super代表的是父類對象的引用。 2,函數 1)當子類出現與父類一模一樣的函數時,子類對象調用該函數,會運作子類函數的内容,如同父類的函數被覆寫一樣。這種情況是函數的另外一個特性的展現-----覆寫(override)。 當子類繼承父類,沿襲了父類的功能到子類中,但子類雖然具備了該功能,但是功能的内容卻和父類不一緻,這時,沒有必要定義新功能,而是使用覆寫特性保留父類的功能定義,并重寫功能内容。 2)覆寫(override)的特點 A,子類覆寫父類,必須保證子類權限大于等于父類權限,才可以覆寫,否則編譯失敗。 B,覆寫發生在繼承中,子類覆寫父類的方法,他們的方法定義是一模一樣包括傳回值類型。 C,靜态方法隻能覆寫靜态方法。 三、構造函數----子類執行個體化過程 1,子父類中的構造函數 在對子類對象進行初始化時,父類構造函數也會運作,那是因為子類的構造函數預設第一行有一條隐式的語句super(),super()會通路父類中的空參數的構造函數,而且子類中所有構造函數預設第一行都是super()。 2,為什麼子類一定要通路父類中的構造函數? 因為父類中的資料,子類可以直接擷取,是以子類對象在建立時,要檢視父類是如何對這些資料進行初始化的,是以子類對象在初始化時,要先通路一下父類中的構造函數,如果要通路父類中指定的構造函數,可以通過手動定義super語句的方式實作。 3,子類的執行個體化過程 子類中的所有的構造函數,預設都會通路父類中空參數的構造函數,因為子類每一個構造函數的第一行都有一句隐式super()語句。 當父類中沒有空參數的構造函數時,子類必須手動通過super形式來指定要通路的構造函數 當然,子類的構造函數第一行也可以手動指定this語句來通路本類中的構造函數。子類中至少會有一個構造函數會通路父類中的構造函數。 三、final關鍵字 final的中文意思是最終的意思,她是一個修飾符。 1,可以修飾類,函數,變量(包括局部變量和成員變量) 2,被final修飾的類不可以被繼承,那麼也就不存在函數的複寫特性了。 3,被final修飾的函數不可以被覆寫。 4,被final修飾的變量是一個常量,隻能被指派一次。 5,内部類定義在類中的局部位置時,隻能通路該局部被final修飾的局部變量。 四、抽象類 1,抽象類的特點 1)抽象方法一定在抽象類中 2)抽象方法和抽象類必須被abstract關鍵字修飾 3)抽象類不可以用new建立對象,因為調用抽象方法沒有意義 4)抽象類中的方法要被使用,必須由子類覆寫其所有的抽象方法後,建立子類對象調用,如果子類隻覆寫了部分抽象方法,那麼該子類還是一個抽象類。另外還有一點:一個抽象類中的可以出現這樣一個極端,裡面的方法可以全部不是抽象方法,這樣做的目的是強制讓子類繼承。 2,一般類和抽象類的差別 1)抽象類比一般類多了抽象方法。 2)抽象類不可以被執行個體化 3)抽象類中可以不定義抽象方法,這樣做,就是不讓該類建立對象。 五、接口 1,接口的初期了解,可以認為是一個特殊的抽象類。當抽象類中的方法都是抽象的,那麼該類可以通過接口的形式來表示。接口使用interface定義。 2,接口的特點 1)接口中常見的定義是:常量,抽象方法 2)接口中的成員都有固定修飾符 常量:public static final 方法:public abstract 3,接口的注意事項 1)接口是不可以建立對象的,因為有抽象方法需要被子類實作,子類對接口中的抽象方法全部都覆寫後,子類才可以執行個體化,否則子類是一個抽象類。 2)類與接口的關系是實作(implements),一個類在繼承另外一個類的同時,還可以實作多個接口 3)接口與接口之間的關系是繼承(extends),一個接口可以同時繼承多個接口。 六、模闆方法設計模式 1,在定義功能時,一部分是确定的,但是有一部分是不确定的,而确定的部分在使用不确定的部分,那麼這時候就将不确定的部分暴露出去,有該類的子類來完成。 2,一個示例代碼 需求:擷取一段程式運作的時間。 原理:擷取程式開始和結束的時間并相減即可。 擷取時間:System.currentTimeMillis(); abstract class GetTime { public final void getTime() { long start = System.currentTimeMillis(); runcode(); long end = System.currentTimeMillis(); System.out.println("毫秒:"+(end-start)); } public abstract void runcode(); } class SubTime extends GetTime { public void runcode() { for(int x=0; x<4000; x++) { System.out.print(x); } } } class TemplateDemo { public static void main(String[] args) { //GetTime gt = new GetTime(); SubTime gt = new SubTime(); gt.getTime(); } }
轉載于:https://www.cnblogs.com/Rebecca-gg/p/4463951.html