为什么我们实现抽象类的接口

时间:2013-03-01 11:33:29

标签: design-patterns interface strategy-pattern

请找到参考链接:"Strategy for success" article of JavaWorld

我的问题是,当我们可以在抽象类本身声明那些抽象方法时,为什么我们需要有单独的接口并在抽象类中实现它?

ex in image,

public interface Border(){
      paintBorder();
      getBorderInsets();
      isBorderOpaque();
 }


public class abstract AbstractBorder implements Border(){
 .....
}

相反,我们可以有像

这样的抽象类
public class abstract AbstractBorder {
      paintBorder();
      getBorderInsets();
      isBorderOpaque();
 }

为什么我们使用界面?有什么必要?

3 个答案:

答案 0 :(得分:1)

可能接口定义了可能存在于其他抽象类中的行为,而不是您提到的那个。一个很好的例子是IDisposable接口。

如果您决定在抽象类本身中声明这些方法,那么当您从这个抽象类中实现具体类时,最终可能会遇到很多混乱。此外,由于您可以在抽象类中指定行为,因此实现类可能会重用此行为。

答案 1 :(得分:0)

当我开始使用Java时,这也是我想过的。可以找到一个非常详细的答案here。如果您需要进一步澄清,请发表评论。

答案 2 :(得分:0)

接口是一个很好的实践编程,而不是课堂。在策略模式中,想法是具有“策略”的接口,并且在运行时可以更改策略(实现接口的类),而无需在不改变代码的其余部分的情况下进行更改。

这是SOLID原则的良好开端,使您的代码更灵活,更强大。

我有一个exemple of the Strategy Pattern in my github并且在对象“Cavaleiro”(英语中的骑士)在运行时间中被更改。

为此我创建了一个界面并使用它而不是类的对象,通过它我可以轻松地改变“策略”。