从设计理念的层面去分析,abstract class在java预研中表示一种继承的关系,而继承在本质上是“is a”的关系,interface是“like a”的关系。使用abstract还是interface反应了你对问题领域的理解。
例:Door ,Alarm和AlarmDoor。如果我们这么理解:AlarmDoor在本质上 是属于Door,而其又具有Alarm的功能(实现了alarm所定义的行为)。所以我们这样设计
public abstract class Door{
abstract void open();
abstract void close();
}
public interface Alarm{
void alarm();
}
public class AlarmDoor extends Door implements Alarm{
void open(){.....};
abstract void close(){......};
void alarm(){......};
}