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

java的抽象類和介面

最近一直在刷校招的題目,突然發現自己對介面和抽象類的掌握並不牢固,所以想記錄一下對java介面和抽象類的理解

一:抽象類

抽象方法是一種特殊的方法:它只有宣告,而沒有具體的實現。抽象方法的宣告格式為:
abstract void test();

 抽象方法必須用abstract關鍵字進行修飾。如果一個類含有抽象方法,則稱這個類為抽象類,抽象類必須在類前用abstract關鍵字修飾。因為抽象類中含有無具體實現的方法,所以不能用抽象類建立物件。

public abstract class circle {

    abstract void test();
}

抽象類和普通類的主要有三點區別:

  • 抽象方法必須為public或者protected(因為如果為private,則不能被子類繼承,子類便無法實現該方法),預設情況下預設為public。
  • 抽象類不能用來建立物件;
  • 如果一個類繼承於一個抽象類,則子類必須實現父類的抽象方法。如果子類沒有實現父類的抽象方法,則必須將子類也定義為為abstract類。

二:介面

CalInterface介面

public interface CalInterface {
    public float PI = 3.14f;
    public float getArea(float a);
    public float getPi();
}

Cire類implements CalInterface介面

public class Cire implements CalInterface {

    @Override
    public float getArea(float a) {
        return 0;
    }

    @Override
    public float getPi() {
        return 0;
    }
}

介面中的方法例項,所有的方法不能有具體的實現,也就是說,介面中的方法必須都是抽象方法,implements的類需要重寫該方法,從這裡可以隱約看出介面和抽象類的區別,介面是一種極度抽象的型別,它比抽象類更加“抽象”,並且一般情況下不在介面中定義變數。介面中的變數會被隱式地指定為public static final變數(並且只能是public static final變數,用private修飾會報編譯錯誤),而方法會被隱式地指定為public abstract方法且只能是public abstract方法(用其他關鍵字,比如private、protected、static、 final等修飾會報編譯錯誤)

三:抽象類和介面的區別

  1. 抽象類可以提供成員方法的實現細節,而介面中只能存在方法;
  2. 抽象類中的成員變數可以是各種型別的,而介面中的成員變數只能是public static final型別的;
  3. 介面中不能含有靜態程式碼塊以及靜態方法,而抽象類可以有靜態程式碼塊和靜態方法;