Java基礎之final和abstract關鍵字

final

final在Java中是一個保留的關鍵字,能夠聲明成員變量、方法、類以及本地變量。一旦你將引用聲明做final,你將不能改變這個引用了,編譯器會檢查代碼,若是你試圖將變量再次初始化的話,編譯器會報編譯錯誤。html

修飾變量(例如Math類的PI=3.1415926就是變量不可修改)學習

用final關鍵字修飾的成員(實例)變量或局部變量統稱爲final變量。final變量常常和static關鍵字一塊兒使用,做爲常量。用final關鍵字修飾的變量,若是是基本數據類型的變量,則其數值一旦在初始化以後便不能更改(只讀類型);若是是引用類型的變量,則在對其初始化以後便不能再讓其指向另外一個對象。htm

修飾方法對象

final關鍵字能夠修飾方法,表明這個方法不能夠被子類的方法重寫(覆蓋)。若是你認爲一個方法的功能已經足夠完整了,繼承它的類中不須要改變的話,你能夠聲明此方法爲final。final方法比非final方法要快,由於在編譯的時候已經靜態綁定了,不須要在運行時再動態綁定。blog

關於private和final關鍵字還有一點聯繫,這就是類中全部的private方法都隱式地指定爲是final的,因爲沒法在類外使用private方法,因此也就沒法覆蓋它。繼承

修飾類接口

當用final修飾一個類時,代表這個類不能被繼承。也就是說,若是一個類你永遠不會讓他被繼承,就能夠用final進行修飾。final類中的成員變量能夠根據須要設爲final,可是要注意final類中的全部成員方法都會被隱式地指定爲final方法。Java中有許多類是final的,譬如String類、Math類、Integer以及其餘包裝類。編譯器

abstract

修飾方法編譯

abstract關鍵字修飾的方法稱爲抽象方法。抽象方法只有方法的聲明,沒有方法的實現,即方法名後面沒有大括號{},抽象方法是供子類繼承重寫的,他的實現是經過子類繼承方法所在的類,而後重寫(覆蓋)該方法並實現具體功能。抽象方法通常定義在抽象類和接口中。class

修飾類

abstract關鍵字修飾的類稱爲抽象類。抽象類不能被實例化,不能經過new關鍵字建立類的對象。若是子類(非抽象類)繼承了抽象類,抽象類能夠指向子類的引用。抽象類能夠包含抽象方法和非抽象方法。

如abstract class A{}、class B extends A{},不能夠建立A類的實例對象即不能夠「A a=new A();」。但A類的引用變量能夠指向B類對象,便可以「A a=new B();」。

  • 若是一個類中有抽象方法,則這個類必須是抽象類;若是一個類是抽象類,則這個類中的方法不必定是抽象的,抽象類中能夠有抽象方法,也能夠有非抽象方法(如構造方法)。
  • 若是一個子類繼承了抽象類,並重寫(實現)了全部的抽象方法,則能夠建立此類的對象並實例化;若是沒有重寫(實現)全部的抽象方法,意味着此類中仍有抽象方法,則此類必須聲明爲抽象的!
  • 接口中全部方法都是抽象方法,接口通常用於定義一系列方法,供其餘類繼承並實現;而抽象類中的方法能夠是抽象方法,也能夠是非抽象方法。所以接口比抽象類更抽象,接口能夠理解爲純抽象的,抽象類能夠理解爲半抽象的,普通類是不抽象的,抽象類是純抽象到不抽象的一個過渡。

        轉載請註明出處 http://www.cnblogs.com/Y-oung/p/9048287.html

        工做、學習、交流或有任何疑問,請聯繫郵箱:yy1340128046@163.com

相關文章
相關標籤/搜索