修改接口的多个类,一个设计问题

时间:2019-06-05 15:49:30

标签: java inheritance software-design

假设我有一个名为Parent的接口

Partial<Item>

假设在10个不同的Child类中实现了此接口

interface Parent{

void methodOne();
}

我们如何将新方法添加到Parent接口,而不破坏其他10个类。

class Child1 implements Parent{
void methodOne();
}

class Child2 implements Parent{
void methodOne();
}
:
:
class Child10 implements Parent{
void methodOne();
}

我知道在Java 8中我们可以添加默认方法,但是在Java 8之前还有其他方法可以实现

2 个答案:

答案 0 :(得分:2)

之所以引入默认方法,是因为如果您要向接口添加新方法,则所有实现此接口的类都将通过强制您在其中实现新方法而抛出错误,这就是类中断的意思,但是如果将任何新方法添加到接口,则如果未将该方法声明为默认方法,则必须由实现该接口的所有类来实现该方法。如您所述,Java 8中引入了此功能,以帮助实现向后兼容。要对此进行进一步的澄清,您可以check this article。您也可以check this差不多的问题来指导您给出答案。但是,对于以前的Java版本,可以使用Abstract类而不是接口来避免破坏类。

答案 1 :(得分:2)

没有默认的实现,就不能向接口添加方法,而不必在每个实现类中都实现它。解决方法是让您的类扩展一个抽象类,该抽象类又实现了接口。你会有这样的东西:

for($i = 0; $i <= $num_files;) {
  $i++;
  $fp = fopen('lamsam_' . $i .'.jpg', 'w');
  fwrite($fp, $dataBinary[$i]);
  fclose($fp);
  $fp = $fileNameSave;
}

现在,如果您想向接口添加新方法,则可以在public interface Parent { public void methodOne(); } public abstract class AbstractChild implements Parent { //literally, leave blank } public class Child1 extends AbstractChild { public void methodOne() { //implementation goes here } } .... 中实现它们-无需触摸所有AbstractChild类。