一位面试官问我以下问题,我无法回答:
当抽象类存在时,为什么我们需要接口?
无论我们在接口中编写什么方法,我们也可以在抽象类中编写。那为什么我们需要单独的接口呢?
谁能告诉我是什么原因?
提前谢谢...
一位面试官问我以下问题,我无法回答:
当抽象类存在时,为什么我们需要接口?
无论我们在接口中编写什么方法,我们也可以在抽象类中编写。那为什么我们需要单独的接口呢?
谁能告诉我是什么原因?
提前谢谢...
有几个区别,
接口非常适合专注于我们可以在类上拥有的“视图”。该视图可以由实现该接口的多个类共享。
例如,DataTable实现IListSource和ISerializable。因此,根据上下文,您可以将其视为一个列表源来读取其数据,也可以将其视为可以序列化实例的类。当您这样做时,您将专注于您可以拥有的实例的特定视图。
接口代表一个契约,而您可以在不同的(抽象)类中拥有该契约的多个实现。
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.");
}
}
您的抽象类是部分实现。接口是契约,知道你的抽象类能做什么。你需要一个接口来描述它。
您可以实现多个接口,但只能从一个抽象类继承。
接口是一个空壳,只有方法的签名(名称/参数/返回类型)。这些方法不包含任何内容。界面什么都做不了。这只是一个模式
与接口不同,抽象类是类。使用起来更昂贵,因为从它们继承时需要进行查找。
抽象类看起来很像接口,但它们还有更多的东西:你可以为它们定义一个行为。更多的是关于一个人说“这些课程应该看起来像这样,并且他们有共同点,所以请填空!”。
从这里引用 e-satis(还有更多信息): 接口和抽象类有什么区别?
你不能从多个抽象类继承,但你可以实现多个接口。