Java學習日記num6

來源:互聯網
上載者:User

標籤:

學習內容:繼承的概述;繼承出現後子父類中成員的特點;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 abstract3,介面的注意事項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();}}

Java學習日記num6

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.