一 接口和抽象類的相似性
1 接口和抽象類都不能被實例化,它們都位于繼承樹的頂端,用于被其他類實現(xiàn)和繼承。
2 接口和抽象類都可以包含抽象方法,實現(xiàn)接口或繼承抽象類的普通子類都必須實現(xiàn)這些抽象方法。
二 接口和抽象類的區(qū)別
1 接口里只能包含抽象方法,靜態(tài)方法和默認方法,不能為普通方法提供方法實現(xiàn),抽象類則完全可以包含普通方法。
2 接口里只能定義靜態(tài)常量,不能定義普通成員變量,抽象類里則既可以定義普通成員變量,也可以定義靜態(tài)常量。
3 接口不能包含構造器,抽象類可以包含構造器,抽象類里的構造器并不是用于創(chuàng)建對象,而是讓其子類調(diào)用這些構造器來完成屬于抽象類的初始化操作。
4 接口里不能包含初始化塊,但抽象類里完全可以包含初始化塊。
5 一個類最多只能有一個直接父類,包括抽象類,但一個類可以直接實現(xiàn)多個接口,通過實現(xiàn)多個接口可以彌補Java單繼承不足。