2016-02-16 19 views
0

我想弄清楚如何在我正在处理的项目中最好地解决此问题。我会给出一个类比的问题:Java设计:为扩展相同基类的类添加通用功能,但不修改基类

有一个类,汽车。出汽车的,我创建了3类,扩展它:

  • 豪华轿车延伸汽车
  • 卡车延伸汽车
  • 总线延伸汽车

现在,假设我意识到有人忘记在Car类中包含一个getSpeed()方法,我需要添加它。但是,我无法以任何方式修改Car类,并且3个类必须扩展Car。如何最好地为这3个类添加一个通用功能,而不必前后复制粘贴代码? getSpeed()方法的实现对于每个类都是相同的,所以我想要类似抽象类的东西,但仍然可以将类保留为扩展Car。

这是我的周围只有这样一个例子,到目前为止,但我很好奇,如果有一个更好的办法:

public class Limo extends Car { 
    CarSpeed cs; 
    public Limo() { 
     cs = new CarSpeed(this); 
    } 
} 

,并有CarSpeed类包含实际getSpeed()方法。

有没有更清晰的方式来做到这一点,我不知道?我也只能在Java 7中工作,所以我不认为我可以使用默认的关键字(不是我已经读了它足以知道它是否适用于这种情况:()

+0

请问为什么你不能将getSpeed()添加到Car?整个继承点是采用父/基类的某些特征。 – ryekayo

+0

它是我无法方便地重新编译的一个jar文件的一部分:( – misaka

+0

Yikes。嗯......所以基本上你的导入库然后正确? – ryekayo

回答

0

有两种可能的方式来实现这一目标:

  1. 添加getSpeed()到汽车类,以便其他类可以继承这个方法,这可能是因为它遵循OOP的最佳方法

  2. 创建。接口并添加getSpeed(),唯一的是像Limo,Truck和Bus等其他类将不得不创建012的主体当你实现接口。