相同點(diǎn):
- 均可定義抽象方法
不同點(diǎn):
- 抽象類中可以有抽象方法用abstract修飾, 不可用private. 也可以有非抽象的方法
- 接口類中所有的方法都只能是抽象方法(從Java8 開始, 接口類中的方法可以有默認(rèn)實(shí)現(xiàn), 用default關(guān)鍵字修飾)
- 接口類中的屬性都只能是final static.
為什么接口類中的屬性只能是final static?
接口本來就是高度抽象的類, 其中定義的屬性不應(yīng)該被修改. 而且其中的屬性是對于所有實(shí)現(xiàn)了該接口的類所共同所有, 一旦修改, 即對所有的類都修改. 沒有任何意義. 而用static修飾是因?yàn)榻涌陬悷o法實(shí)例化, 如果想要調(diào)用其屬性, 只能通過類來調(diào)用, 所以要加上static. - 由于抽象方法一般用public, protected, default來修飾, 不可用private修飾. 因?yàn)槌橄蠓椒ū緛砭褪菫榱吮恢貙? 如果用private修飾的話, 就無法進(jìn)行重寫了
注: 當(dāng)一個類同時實(shí)現(xiàn)了兩個接口時, 并且兩個接口中有同名的默認(rèn)實(shí)現(xiàn)方法, 則該類需要重寫該默認(rèn)方法.