Java abstract class 和 interface 的區別post
1. abstract class和interface是Java語言中對於抽象類定義進行支持的兩種機制blog
2. 以Door的抽象概念爲例,門通常有open和close動做,若是隻有這些,經過abstract class或者interface來定義均可以,看起來沒問題。繼承
3. 可是Door應該還有一些抽象的屬性,好比狀態,大小、形狀、材質等,這些放在interface定義裏就不合適了(注:interface的成員變量必須是public static final的),應該用abstract class來定義,因此對同一類事物/問題域的抽象化定義應該用abstract class,好比鳥類、形狀等。接口
4. 咱們再想一想,如何作一個有報警功能的AlarmDoor類,在abstract class里加alarm()方法不太合適吧,由於不是全部的門都有報警功能,也不能再定義Alarm的abstract class,由於Java不容許多重繼承,這裏應該用interface來定義,AlarmDoor實現IAlarm接口就能夠了。因此對一個具體的類要實現某些新功能,能夠經過interface來標準化。標準化的IAlarm接口還能夠給其餘須要報警功能的類使用,好比AlarmWindow。class