定義規(guī)則
- 抽象類和抽象方法必須使用abstract修飾符修飾王滤,抽象方法不能有方法體
- 抽象類不能被實(shí)例化硫狞。即使抽象類里不包含抽象方法产镐。
- 抽象類可以包含成員變量尤莺、方法(包括普通方法和抽象方法)予颤、構(gòu)造器囤官、初始化塊、內(nèi)部類5種成分蛤虐。抽象類的構(gòu)造器只用于被子類調(diào)用党饮。
- 含有抽象方法的類只能被定義為抽象類。
抽象類和接口的區(qū)別
Abstract class | Interface |
---|---|
可以有抽象方法驳庭、非抽象方法刑顺、靜態(tài)方法,可以定義 public饲常、protected和private修飾的具體方法 | 只能有抽象方法蹲堂,java 8之后可以有默認(rèn)方法和靜態(tài)方法,所有方法都只能用public修飾 |
不支持多繼承 | 支持多繼承 |
可以有final, non-final, static and non-static 變量 | 所有變量都必須使用public static 和 final修飾 |
可以實(shí)現(xiàn)接口 | 不可以實(shí)現(xiàn)抽象類 |
可以繼承一個(gè)類和實(shí)現(xiàn)多個(gè)接口 | 只能繼承接口 |
總的來說不皆,抽象類只實(shí)現(xiàn)部分抽象化贯城,而接口則實(shí)現(xiàn)了完全抽象化。
抽象類和接口的使用場(chǎng)景
使用抽象類的場(chǎng)景:
- 聯(lián)系緊密的幾個(gè)類之間需要共享代碼
- 各子類可能擁有許多共同的方法或成員霹娄,或者這些方法或成員需要public以外的修飾符(如protected和private)修飾
- 需要聲明non-static或non-final的成員
使用接口的場(chǎng)景:
- 實(shí)現(xiàn)接口的類之間沒有聯(lián)系
例如許多毫無關(guān)聯(lián)的類都實(shí)現(xiàn)了Comparable接口 和 Cloneable接口 - 需要明確聲明與某一種數(shù)據(jù)類型有關(guān)的行為能犯,但不在乎那個(gè)類或接口實(shí)現(xiàn)這種行為
- 需要用到多繼承
復(fù)習(xí)一下java中的變量:
*歡迎到作者github主頁交流