抽象類和介面的區別

2021-06-21 12:09:50 字數 1892 閱讀 5601

每次面試都問,每次都含含糊糊答不上來,今天徹底總結一下,下次再回答這個問題答得有一點缺陷就去死。

寫**測試一下:介面inttest,介面實現類inttest2.抽象類abstest,抽象類實現類abstest2

inttest:

package com.abstractandinte***ce;

public inte***ce inttest

// synchronized

//介面中的方法預設 public abstract,也是不管寫幾個關鍵字,都自動補充成 public abstract

public void method1();//方法沒有方法體

void method2();

void method3(int i,int j);//可以有引數

//static void method4();//不能夠有靜態方法 靜態方法能被繼承嗎

}

inttest2:

package com.abstractandinte***ce;

public class inttest2 implements inttest

@override

public void method2()

@override

public void method3(int i, int j)

public static void main(string args)

}

abstest:

package com.abstractandinte***ce;

public abstract class abstest

// synchronized

//可以有 get set 方法

public void method1()

public string mehtod2(int i)

private void method3()

//如果方法用abstract修飾,就不用方法體了

//並且,該方法在抽象類的實現類中必須重寫

public abstract void method4();

}

abstest2:

package com.abstractandinte***ce;

public class abstest2 extends abstest

public static void main(string args)

@override

public void method4()

};}}

總結:

1,介面的變數只能為public static final型別,並且因為是final型別必須賦值,宣告的時候可以寫三個關鍵字中的0-3個,編譯器會自動補充到3個;

抽象類的變數可以為private,protected,friendly,public 中的任意乙個,只不過private型別沒有實際意義,預設變數型別為friendly。

2,介面中方法的型別只能為public abstract,寫關鍵字中的0-2個會自動補充,介面的實現類必須重寫介面的所有方法。而抽象類中的方法型別可為private,protected,friendly,public,還都可以是static,還可以在後三種型別中加上abstract,用abstract修飾的方法在實現類中必須重寫,而其他可以重寫也可以不重寫。

3,乙個實現類可以繼承多個介面,只能繼承乙個抽象類。

4,abstract class和inte***ce所反映出的設計理念不同。其實abstract class表示的是"is-a"關係,inte***ce表示的是"like-a"關係。

參考文章:



抽象類和介面的區別

要結合來使用,從而互補長短。接下來先說說抽象類和介面的區別。區別一,兩者表達的概念不一樣。抽象類是一類事物的高度聚合,那麼對於繼承抽象類的子類來說,對於抽象類來說,屬於 是 的關係 而介面是定義行為規範,因此對於實現介面的子類來說,相對於介面來說,是 行為需要按照介面來完成 這些聽起來有些虛,舉個例...

抽象類和介面的區別

net提供了介面,這個不同於class或者struct的型別定義。介面有些情況,看似和抽象類一樣,因此有些人認為在.net可以完全用介面來替換抽象類。其實不然,介面和抽象類各有長處和缺陷,因此往往在應用當中,兩者要結合來使用,從而互補長短。接下來先說說抽象類和介面的區別。區別一,兩者表達的概念不一樣...

抽象類和介面的區別

net提供了介面,這個不同於class或者struct的型別定義。介面有些情況,看似和抽象類一樣,因此有些人認為在.net可以完全用介面來替換抽象類。其實不然,介面和抽象類各有長處和缺陷,因此往往在應用當中,兩者要結合來使用,從而互補長短。接下來先說說抽象類和介面的區別。區別一,兩者表達的概念不一樣...