1. 程式人生 > >java 抽象類 介面

java 抽象類 介面

抽象類的理解:抽象類就是比普通的類多了一個abstract修飾符,如果一個類裡面有抽象的方法那麼這個類一定要用abstract修飾,抽象類裡可以沒有抽象方法。抽象類可以有建構函式,因為類是用來繼承的子類會呼叫父類的建構函式,預設是super(),如果抽象類中定義了有引數的建構函式,那麼子類一定要定義個和抽象類中的建構函式一直的建構函式

抽象類是不能夠例項化的類: 它的作用就是產生子類的同時給於子類一些特定的屬性和方法.
優點:如果多個類繼承了此類,當修改抽象類的屬性時,可以同時修改多個。
抽象類是一些抽象概念上的東西,是我們設計人員獨立出來而現實不存在的東西。抽象的概念在問題領域沒有對應的具體概念,所以用以表徵抽象概念的抽象類是不能夠例項化的。 抽象類就如他的名字一樣是抽象的,他裡面的方法都是沒有方法體的,也就是沒有實際的實現程式碼,而例項化後的物件是類的一個實體物件,是可以呼叫他的方法完成一些功能的,一個抽象類的方法沒有方法體(半成品,呵呵),當然不能例項化了。
從設計的角度看:抽象類在公司通常不是由程式設計師定義的,而是由專案經理或者某個模組得設計人員。設計抽象類得原因通常只有一個:為了規範方法名。咱們都知道,抽象類必須要繼承,不然沒法用,作為模組設計者,可以把讓底層程式設計師直接用得方法直接呼叫,而一些需要讓程式設計師覆蓋後自己做得方法則定義稱抽象方法。
通俗的講,定義了一個汽車的抽象類,可是你不可以例項化它,因為你不知道它是轎車,客車,F1賽車。
抽象類和介面區別
  1.abstract class 在 Java 語言中表示的是一種繼承關係,一個類只能使用一次繼承關係。但是,一個類卻可以實現多個interface。
  2.在abstract class 中可以有自己的資料成員,也可以有非abstarct的成員方法,而在interface中,只能夠有靜態的不能被修改的資料成員(也就是必須是static final的,不過在 interface中一般不定義資料成員),所有的成員方法都是abstract的。
  3.abstract class和interface所反映出的設計理念不同。其實abstract class表示的是"is-a"關係,interface表示的是"like-a"關係。 
  4.實現抽象類和介面的類必須實現其中的所有方法。抽象類中可以有非抽象方法。介面中則不能有實現方法。
  5.介面中定義的變數預設是public static final 型,且必須給其初值,所以實現類中不能重新定義,也不能改變其值。
  6.抽象類中的變數預設是 friendly 型,其值可以在子類中重新定義,也可以重新賦值。 
  7.介面中的方法預設都是 public,abstract 型別的。