9 回答

TA貢獻1804條經驗 獲得超2個贊

TA貢獻1779條經驗 獲得超6個贊
接口表示一個能力/行為。例如:人會跑,狗也會跑,就可以定義接口IRunable。 使用接口很好實現組件間解耦。
抽象類就是為了實現多態,使代碼更方便擴展。

TA貢獻1817條經驗 獲得超6個贊
接口的話更偏向于為一群類定一個協議, 而抽象類的話已經向實現邁進了一步。
例如模板方法模式中就用到了抽象類,實現了一些通用的方法, 而將不同的方法延遲到子類再實現。

TA貢獻1844條經驗 獲得超8個贊
舉個簡單的例子,你現在想要抽象所有國家的人,那么你會想到抽象成一個接口,然后有個方法叫sayHello:
public interface Human{
String sayHello();
}
OK,現在每個實現了這個接口的對象只要實現sayHello方法,就表示了各個國家的人,他們擁有了不同的打招呼的的方式。
但是現在業務復雜起來了,你需要這些人還具備一些通用的能力,比如cry,walk,那么這個時候,你是不是應該考慮把Human抽象成為一個抽象類,像這樣:
public abstract class Human{
public abstract String sayHello();
public String cry(){
System.out.println("wu~wu~wu~wu~wu~");
}
public String walk(){
System.out.println("左右左 左右左");
}
}
總結一下,就是如果只有抽象的方法,那么就用接口,如果還有通用的具體方法實現,則用抽象類

TA貢獻1811條經驗 獲得超4個贊
參考:
The Java? Tutorials :: Learngin The Java Language :: Interfaces and Inheritances :: Inheritances :: Abstract Methods and Classes :: Abstract Classes Compared to Interfaces
添加回答
舉報