-1

以下接口和抽象类有什么区别:

 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. 如果使用“实现 MyInterface”,我必须提供所有三种方法的实现,而在“扩展 MyAbstract”的情况下,我愿意发扬抽象性。

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

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

4

3 回答 3

3

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

如果您对所有子类都有共同的“默认行为”,那么使用抽象基类的情况会更加强烈。

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

恕我直言...

于 2012-05-22T07:11:37.840 回答
0

abstract将一个类与所有方法一起使用是没有意义的abstract——这本质上是一个接口。如果您有一些通用的基本逻辑(真实代码,而不仅仅是抽象方法),那么声明一个abstract类,可能实现一个interface.

于 2012-05-22T07:06:50.677 回答
0

当没有我应该放入的公共代码时,我选择接口。仅在可以通过子类共享某些东西的情况下-是的,我使用抽象类(模板模式)。

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

在顶层使用界面。将所有应该实现的方法移到那里。带有接口而不是实现的程序。实现有更多的改变,接口更少。

于 2012-05-22T07:30:16.670 回答