1. 程式人生 > >Java基礎學習之介面和抽象類的概念、區別及適用的場景

Java基礎學習之介面和抽象類的概念、區別及適用的場景

1.介面

  介面是抽象方法的集合,一個介面只有方法的形狀而沒有方法的具體實現,介面是Java面向物件提供的一種機制。
  Java語言是一種單繼承的,在類的繼承中通過實現多個介面間接實現了多繼承功能。介面的宣告:

[public] interface InterfaceName{
    void method1(int arg1);
    void method2();
    ...
}

2.抽象類

  抽象類是用來捕捉子類的通用特性的 。它不能被例項化,只能被用作子類的超類。抽象類是被用來建立繼承層級裡子類的模板。抽象類宣告:

[public] abstract class ClassName {
    abstract void fun();
    void fun2();
    ...
}

3.介面和抽象類區別

  (1)、介面只能包含抽象方法,抽象類可以包含普通方法;
  (2)、介面的方法都是完全抽象的,並且方法必須是public,而且預設方法是public abstract的,抽象中的方法可以被public,protected等修飾符修飾;
  (3)、子類用implements來實現介面,子類需要實現介面中的所有方法,但繼承抽象類可以不重寫父類中非抽象方法,抽象類中的抽象方法必須被重寫;
  (4)、一個類可以實現多個介面,但只能繼承最多一個抽象類,介面可以繼承一個或者多個介面;
  (5)、抽象類中可以有普通成員變數,介面中沒有普通成員變數,只能有常量;
  (6)、抽象類中的方法可以被static修飾,介面中的方法不可以被static修飾;
  (7)、抽象類可以有建構函式,介面不可以有建構函式。
  PS:相同點是都不能例項化(不能new),都有抽象方法,子類中必須對父類方法進行重寫。

4.介面和抽象類的使用場景

  介面主要用於實現多繼承的場景以及模組與模組之間的呼叫情況,抽象類主要用於當做基礎類使用,即基類(基類裡面的一些方法都有預設的方法實現,即實現介面的公用的程式碼,個性化的方法由各個子類去實現)。