天天看點

java中抽象類和接口的差別java中抽象類和接口的差別

java中抽象類和接口的差別

抽象類和接口都展現了oop的抽象,兩者之間有很多相似之處,但同時又有許多的不同之處。容易弄混淆,今天就簡單的說一下兩者之間的差別于相似之處吧!
           

一.抽象類與基本類

抽象方法:

 抽象方法是一種特殊的方法,隻有方法的申明,并沒有具體的實作

    public abstract className{
        abstratct void fun();
    }

    抽象類就是指包含有抽象方法的類,抽象類必須用abstract關鍵字修飾,抽象方法也必須用abstract關鍵字修飾。由于抽象類中存在沒有具體實作的方法,是以抽象類不能建立對象。

抽象類除了具有抽象方法之外與其他普通的類沒有任何差別,也就是意味着抽象類可以具有成員變量和普通的成員方法。是以,抽象類和普通類的差別在于:

1)抽象類必須有抽象方法,抽象方法必須用public(protected) abstract來修飾,預設的情況下一般認為是public的。
 2)不能建立抽象類的對象
 3)子類繼承抽象類,必須實作抽象類的抽象方法,否則這個子類也是抽象類。
           

二.接口

interface
     接口中可以有變量和方法,接口中的變量必須是用public static final 來修飾,接口中的方法必須是抽象的,隻能用public abstract來修飾。
[public] interface interfaceName{
//變量A
public static final A;
//抽象方法
public abstract void fun();
}
非抽象類實作了接口之後必須實作接口中的抽象方法,但是如果一個抽象類實作了接口,可以不實作接口中的抽象方法。
           

三.抽象類與接口的差別:

1.文法層面上的差別:

    1)抽象類可以有普通成員方法,接口隻能有抽象方法。
    2)抽象類中的變量可以是任意的,但是接口中的變量隻能是public static final來修飾的
    3)抽象類中可以有靜态方法和靜态代碼塊,但是接口中不能有靜态代碼塊或者是靜态方法
    4)抽象類是單繼承的但是接口是多實作的

2.設計層面上的差別:
    抽象類是對事務整體的抽象,而接口隻是對行為的抽象。比如說汽車和火車都能抽象為一個類,他們都有行駛的功能,我們可以把行駛作為一個接口,用汽車和貨車來實作這個接口。抽象類描述的是”是不是“,而接口描述的是”有沒有“。
    如果一個類A繼承了抽象類B,但是又對B中的方法不滿意,那麼我們可以在B中修改抽象方法(所有子類的公共方法),但是A中的代碼卻不需要改動。如果一個接口C中的方法做了更改,那麼所有實作這個接口的非抽象方法都必須做出相應的改動。抽象類是一種模闆式的定義,而接口則是一種規範的定義。