說道他們的區別,首先讓我們先了解一下什麼是接口,什麼是抽象類。
1.接口:
是抽象方法的集合,接口通常以interface來聲明。
public interface Demo{
public void method();
}
2.抽象類:
使用了關鍵字abstract修飾的類,就是抽象類。
public abstract class Demo{
public abstract void method();
}
然後再讓我們來看看他們的區別:
3相同點:
a.他們都不能被直接實例化,都必須通過繼承實現其抽象方法。
b.都是面向抽象編程的技術基礎,實現了諸多的設計模式。
4.不同點:
a.類是單繼承,多實現(接口);接口是多繼承。
(1)類的單繼承
public class Son extends Father{
}
(2)類的多實現
public class Son implements Father,Mother,..{
}
(3)接口的多繼承public interface Son extends Father,Mother,..{
}
b.抽象類中可以有抽象方法,也可以沒有抽象方法。所以類中如果有抽象方法,就得是抽象類;是抽象類,但不一定有抽象方法。
而接口中所有的方法都是默認爲抽象方法的。
c.抽象類中包括成員變量和非abstract的成員方法,而接口中只存在默認的public static final 的成員變量(在interface中一般不定義成員變量)和默認的public abstract的成員方法。
d.接口中沒有構造方法,而抽象類中有構造方法(提供給子類的)。
e.接口如果被類實現了,必須重寫裏面所有的方法;如果是被抽象類實現了,就沒必要重寫所有方法。
抽象類如果被繼承,一定要重寫裏面所有被abstract關鍵字修飾的方法。