接口和抽象類

接口中的屬性 默認是 public static final類型  就算你不加 默認也是存在

方法默認都是public abstract類型 不加默認也存在

比如

interface K

{

    String abc="sdfd";

    void add() throws Exception;

}

實際上編譯時 是這樣

interface K

{

    Public static final String abc="sdfd";

    public abstract void add() throws Exception;

}

 

爲什麼屬性是static

   因爲 接口不能實例化,非靜態變量必須是實例化的對象或則有方法體的方法可以可以調用 所以不是靜態就沒有意義了

爲什麼必須是 public

  因爲接口本來就是一種約束 定義抽象方法 就是約束子類必須去實現 必須是public 否則訪問不到

  屬性不定義成public 外界訪問不到 同樣沒有意義了

爲什麼方法是abastract

因爲帶有abstract 關鍵字的方法,子類才必須實現 所以帶有abstract關鍵字的方法

不能帶有final  abstract 是子類必須繼承  final 是該方法不能被重寫 所以會產生衝突

 比如

interface K

{

    Public String abc="sdfd";

    public void add() throws Exception;

}

 

public class H implements K{

    public String abc="";

    public  final void add() {

       System.out.println(K.abc);

    }

    public static void main(String[] args) {

       H h=new H();

       h.add();

    }

}

 

子類實現接口時基本的結構必須與接口一致,你不能再方法上添加如 static修飾符

不得將 public 修飾符改成private  但是你可以加上修飾符 final 表示子類的子類不能重寫該方法

 

其實繼承接口實現方法  繼承類 重寫方法 的語法是一致的

 

接口可以繼承接口.抽象類可以實現(implements)接口,抽象類是否可繼承實體類,但前提是實體類必須有明確的構造函數(這句話有點問題 看下面例子 V類並沒有明確的構造函數 只有默認的構造函數).

 

class V implements IV{

    public void add()

    {

       System.out.println("add");

    }

}

interface IV

{

    public void add();

}

interface IV1

{

    public void add();

}

public abstract class 抽象類繼承 extends V implements IV,IV1  {

 

    public  void add() {

       // TODO Auto-generated method stub

       super.add();

    }

}

 

抽象類 與接口的區別

1接口內只能是功能的定義,抽象類中可以包括功能的定義和功能的實現。

 2. 抽象類是用來extends的,而繼承有一定的侷限性,只能繼承一個類 
而接口就不同,可以同時實現多個接口

3 接口字段定義默認爲public static final,而抽象類的則默認爲friendly。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章