最好通过一个例子解释:
interface Plane {
public void flapsExtended();
public void engineFullThrottle();
public void takeOff();
public void landed();
}
class Spitfire implements Plane {
}
class P51Mustang implements Plane {
}
到目前为止,我的代码做得很好。但是,随着二战结束,我们从来没有使用可伸缩起落架的喷气式飞机。
所以我为F22添加了一个新类,需要在retractLandingGear()
和extendLandingGear
阶段之间添加takeOff
和land
。
示例:
class F22 {
public void flapsExtended();
public void engineFullThrottle();
public void takeOff();
public void retractLandingGear();
public void extendLandingGear();
public void landed();
}
现在我如何用这些遗留代码(和传统飞机:)插入F22?)?
答案 0 :(得分:0)
如果您完全控制所有代码并且能够修改它,只需修改旧类,以便新方法执行无操作。
但是,如果您无法修改旧类,则必须使用额外方法创建一个新的子接口,并执行instanceof检查以查看您正在使用的对象使用的接口版本,然后执行相应
当您可以向接口添加默认实现时,将在Java 8中解决此问题。