每次面試都問,每次都含含糊糊答不上來,今天徹底總結一下,下次再回答這個問題答得有一點缺陷就去死。
寫**測試一下:介面inttest,介面實現類inttest2.抽象類abstest,抽象類實現類abstest2
inttest:
inttest2: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();//不能夠有靜態方法 靜態方法能被繼承嗎
}
abstest: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)
}
abstest2: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();
}
總結: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可以完全用介面來替換抽象類。其實不然,介面和抽象類各有長處和缺陷,因此往往在應用當中,兩者要結合來使用,從而互補長短。接下來先說說抽象類和介面的區別。區別一,兩者表達的概念不一樣...