如何在抽象和界面之间做出决定?

时间:2012-05-22 07:04:56

标签: java oop

以下界面和抽象类有什么区别:

 public interface MyInterface
{
  public int get1();
  public int get2();
  public int get3();
}

public abstract class MyAbstract
{
public abstract int get1();
public abstract int get2();
public abstract int get3();
}

采访者不相信以下答案,他想听别的事情:

  1. 我必须扩展MyAbstract然后我不能有更多的扩展,而在实现MyInterface的情况下,我可以继承。

  2. 如果使用“implements MyInterface”,我必须提供所有三种方法的实现,而在“extends MyAbstract”的情况下,我愿意继承抽象性。

  3. 设计视角:所有库都在接口而不是抽象类上工作,使用接口是一种很好的设计实践,这样我以后的任何时候都可以创建任何可以在某些方法中使用的类(实现MyInterface)图书馆。 (基本与第一点相同)

  4. 还有什么可能?我不关心接口/抽象类中的变量等。如何决定使用哪一个?

3 个答案:

答案 0 :(得分:3)

如果两个类之间的关系非常肯定是“is-a”关系,则可能存在使用抽象类的情况。

如果你有所有子类共有的“默认行为”,那么使用抽象基类的情况就更强了。

但总的来说,如果可以使用接口,那么你可能 使用接口。

... IMHO

答案 1 :(得分:0)

使用abstract类与所有方法abstract没有任何意义 - 这实际上是一个接口。如果你有一些共同的基本逻辑(实际代码,而不仅仅是抽象方法),那么声明一个abstract类,可能实现interface

答案 2 :(得分:0)

当我没有应该放入的常用代码时,我选择了界面。只有在有可以通过子类共享的东西的情况下 - 是的我使用抽象类(模板模式)。

你总是可以拥有接口,而不是它的子类作为抽象类。

使用顶级界面。移动所有应实施的方法。使用接口而非实现的程序。实现有更多的改变,接口更少。