2

可能重复:
何时使用接口而不是抽象类,反之亦然?
接口 vs 抽象类(通用 OO)

我有

public interface MyInterface
{
  void Execute();
}

public abstract class MyAbstractClass
{
  public abstract void Execute();
}

现在当一个类实现它们时,抽象类和接口之间有什么区别?当一个抽象类只有一个抽象方法时,一个类何时以及什么原因来实现它们?

昨天面试时问我这个问题。。我没回答。。

提前致谢

4

2 回答 2

5

即使这是重复的,我也会尝试为您澄清:

现在当一个类实现它们时,抽象类和接口之间有什么区别?

如果您使用抽象类,则不同之处在于您需要从抽象类继承,然后覆盖抽象方法。

如果您使用接口,则需要实现该方法,而不从此类继承,如果需要,您可以灵活地从另一个类继承

当一个抽象类只有一个抽象方法时,一个类何时以及什么原因来实现它们?

不要考虑方法的数量以便在其中一种或另一种之间进行选择,而是考虑使用一种方法与另一种方法时的权衡取舍。

  • 如果你决定使用一个抽象类,你的派生类必须继承你的抽象类才能工作,而且由于你只能从 C# 中的一个类继承,你会紧紧抓住抽象类。

  • 如果你实现一个接口,你将能够从另一个类层次结构继承,换句话说,使用接口会给你最灵活的设计

现在,抽象类在您想编写一段基本代码时非常有用,您的子类将继承该代码,在这种情况下,您将在子类中编写更少的代码,有效地重用抽象类中编写的代码。此外,您将能够覆盖抽象方法以提供您自己的实现

于 2012-07-20T05:27:12.710 回答
1

众所周知,oop 中有很多方法可以实现一件事。但是我们必须遵循最佳实践或使用专门的方法。

在您的场景中,接口和抽象类没有太大区别。但是您必须了解接口和抽象之间的区别概念。这是一篇不错的文章:差异接口和抽象类

于 2012-07-20T05:20:57.470 回答