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

java-介面,抽象類

抽象類是普通類和介面之間的一種中庸之道
———摘自thingking in java 我覺得這句話很好的詮釋了抽象類 介面 普通類之間的關係。

通常在寫程式碼的時候,如果遇見需要構建某些為實現的方法的時候可能第一想法就是去使用介面。
但是java存在抽象類,存在必有意義,這是我們在學習知識的時候要反覆去斟酌的一句話。

抽象方法:
abstract void f();
1:沒有方法體
2:abstract修飾
3:預設預設是public

抽象類:
知道了抽象方法之後抽象類的定義就很簡單了,含有抽象方法的類就是抽象類
繼承抽象類的類 必須override所有抽象類中的抽象方法,否則繼承的類也是抽象類。

介面:
interface介面使抽象的概念更進一步,抽象類是部分方法沒有實現,需要子類去做具體實現。
介面則是完全抽象方法,所有的方法都要子類去實現。

介面不只是個完全抽象的類,另一個非常重要的作用就是,實現多繼承,匯出類可以繼承介面
向上轉型為多種基類。

備註:
Java8介面的預設方法
什麼是預設方法,為什麼要有預設方法?
簡單說,就是介面可以有實現方法,而且不需要實現類去實現其方法。只需在方法名前面加個default關鍵字即可。
為什麼要有這個特性?首先,之前的介面是個雙刃劍,好處是面向抽象而不是面向具體程式設計,缺陷是,當需要修改介面時候,需要修改全部實現該介面的類,目前的 java 8之前的集合框架沒有foreach方法,通常能想到的解決辦法是在JDK裡給相關的介面新增新的方法及實現。然而,對於已經發布的版本,是沒法在給介面新增新方法的同時不影響已有的實現。所以引進的預設方法。他們的目的是為了使介面沒有引入與現有的實現不相容發展

public interface Animal {
  default void eat() {
    System.out.println("animal eat default method");
  }
}

介面和抽象類的對比