一位采访者问我以下问题,我无法回答:
为什么在抽象类存在时我们需要接口?
无论我们在接口中编写什么方法,我们也可以在Abstract类中编写。那为什么我们需要单独的接口呢?
请问有谁可以说出原因是什么?
预感谢...
答案 0 :(得分:15)
有几点不同,
接口非常适合专注于我们可以在课堂上拥有的“视图”。该视图可以由实现该接口的多个类共享。
例如,DataTable实现IListSource和ISerializable。因此,根据上下文,您可以将其视为列表源来读取其数据,或者将其视为可以序列化实例的类。执行此操作时,您将专注于可以具有实例的特定视图。
答案 1 :(得分:11)
Interface代表一个契约,而你可以在不同的(抽象)类中实现该契约的多个实现。
public interface IExample
{
void Do();
}
public abstract class DoFirst : IExample
{
public void Do()
{
Console.WriteLine("Doing it the first way");
}
}
public abstract class DoSecond : IExample
{
public void Do()
{
Console.WriteLine("Doing it the second way");
}
}
public class DoFirstConcrete : DoFirst, IExample
{
public void DoSomethingElse()
{
Do();
Console.WriteLine("Doing something else also with first.");
}
}
public class DoSecondConcrete : DoSecond, IExample
{
public void DoSomethingElse()
{
Do();
Console.WriteLine("Doing something else also with second.");
}
}
答案 2 :(得分:8)
您抽象类是部分实现。接口是契约,以了解您的抽象类可以做什么。您需要一个界面来描述它。
答案 3 :(得分:3)
您可以实现多个接口,但只能从一个抽象类继承。
接口是一个空shell,只有方法的签名(名称/参数/返回类型)。这些方法不包含任何内容。界面无能为力。这只是一种模式
与接口不同,抽象类是类。使用起来比较昂贵,因为当你从它们继承时会有查找。
抽象类看起来很像接口,但它们还有更多东西:你可以为它们定义一个行为。它更多的是一个人说“这些类应该看起来像这样,他们有共同点,所以填补空白!”。
从这里引用电子满意(更多信息): What is the difference between an interface and abstract class?
答案 4 :(得分:0)
您不能从多个抽象类继承,但可以实现多个接口。