“实现接口”具体是什么意思?

4

最近我经常见到一个术语"实现接口"…我对这个概念有一点了解,但我想了解更多信息和相关资源。什么时候一个类会实现一个接口?


2
这个问题已经有人问过了,更不用说如果在谷歌上搜索的话,会发现无数非 Stack Overflow 的来源。 - user395760
1
为什么你不提供一个链接呢? - rabidmachine9
6个回答

5

什么是实现接口?

示例 #1:

世界上所有的飞机都实现了IPlane接口。飞机必须拥有:

  1. 两个翅膀

  2. 一个引擎

  3. 必须能够飞行

    public interface IPlane
    {
      void Fly();
      void HasTWoWings();
      void Engine();
    }
    
    class Boeing737 : IPlane // 波音737实现了接口
    {
    // 这意味着波音737必须有一个飞行、两个翅膀和一个引擎的方法。
    // 接口并不指定飞机如何飞行。只要它能飞行,编译器就不会在意。
    
    public void Fly()
    {
        Console.WriteLine("Come fly with me, let's fly, let's fly awaaaaaaaay");
    }
    
    public void HasTWoWings()
    {
        Console.WriteLine("I've got two wings");
    
    }
    
    public void Engine()
    {
        Console.WriteLine("BRrrrrrrrooooooooooooooooooooooooooooooooom!");
    }
    }
    

空客可能有稍微不同的实现方式。

那么这有什么用呢?

作为顾客,我不在乎得到什么飞机,只要它能飞行,有引擎和两个机翼。

这意味着在机场,你可以给我波音或者空客,对我来说都无所谓。

这种能力使我们能够编写代码,帮助减少维护方面的麻烦。事情是开放扩展的,但关闭修改。


4

接口是一份合同,规定了一个类必须创建的一组必需方法。

例如:

public interface ITest
{
   public void DoSomething(int someInt);
}

public class MyClass : ITest
{
   public void DoSomething(int someInt)
   {
      ... Do some stuff
   }
}

如果你没有包含DoSomething方法,编译器会抛出一个错误。

2

接口是一个类必须实现的功能规范。当你实现一个接口时,你向任何使用你的类的消费者指定你提供给定接口定义的功能。例如(在C#中):

public interface ISearchable
{
    List<object> Search(string query);
}

ISearchable 是一个接口,它规定了一个方法,理论上应该为类提供一些搜索功能。现在,任何想要实现搜索功能的类都可以实现 ISearchable 接口:

public class ConcreteSearchable : ISearchable
{
    public List<object> Search(string query)
    {
        // Implementation
    }
}

你现在有一个实现了 ISearchable 接口的类。这带来了一些好处。首先,你明确声明了类的某个行为。其次,您现在可以将您的类(和其他接口实现)多态地对待。
例如,如果有很多类型实现了 ISearchable 接口,你可以创建一个 SearchableFactory,根据特定参数构造一个具体类型。工厂的使用者不需要关心具体的类型...只要他们能搜索它即可:
public class SearchableFactory
{
    public static ISearchable CreateInstance(string query)
    {
        if(query.Contains("SELECT"))
            return new SqlSearchable();
        else
            return new ConcreteSearchable();
    }
}

2
接口是一个类需要实现的方法列表。它是将类的工作方式与类提供的服务分离的一种方式。
您可以想象一个堆栈数据结构。它的接口可能包括以下内容:
push(Node);
Node pop();
Node peek();

如果使用数组来实现栈,您将保留对数组的索引并使用它来执行操作。如果使用链表,则只需保留对头部的指针。接口的要点在于,只要您的实现提供所需的方法,您的实现类的用户就不需要知道您的实现类是如何工作的。
一些语言(如Java和C#)提供显式接口。其他语言(如Ruby或Python)也可以使用相同的技术,但不会强制使用关键字。您可能会听到“鸭子类型”的术语。这是一种说法,如果某个东西实现了正确的接口,那么它就可以被使用,而不管其实现方式如何。

1

接口可增加您代碼的透明度。接口定義一個合同,由類實現。假設我告訴您可以成為我的幫派的一部分,但是您必須始終穿著綠色襯衫。如果您答應,那麼您正在實現一份合同,現在您必須一直穿綠色襯衫。


0
一个接口通常是函数的描述,它们需要哪些参数以及它们将返回什么。这是一种描述函数如何使用以及您可以从中期望得到什么的方式。
实现一个接口意味着实际编写一些代码,以满足接口的描述,包括函数名称、属性和返回值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接