最近我经常见到一个术语"实现接口"…我对这个概念有一点了解,但我想了解更多信息和相关资源。什么时候一个类会实现一个接口?
最近我经常见到一个术语"实现接口"…我对这个概念有一点了解,但我想了解更多信息和相关资源。什么时候一个类会实现一个接口?
什么是实现接口?
示例 #1:
世界上所有的飞机都实现了IPlane
接口。飞机必须拥有:
两个翅膀
一个引擎
必须能够飞行
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!");
}
}
空客可能有稍微不同的实现方式。
那么这有什么用呢?
作为顾客,我不在乎得到什么飞机,只要它能飞行,有引擎和两个机翼。
这意味着在机场,你可以给我波音或者空客,对我来说都无所谓。
这种能力使我们能够编写代码,帮助减少维护方面的麻烦。事情是开放扩展的,但关闭修改。
接口是一份合同,规定了一个类必须创建的一组必需方法。
例如:
public interface ITest
{
public void DoSomething(int someInt);
}
public class MyClass : ITest
{
public void DoSomething(int someInt)
{
... Do some stuff
}
}
DoSomething
方法,编译器会抛出一个错误。接口是一个类必须实现的功能规范。当你实现一个接口时,你向任何使用你的类的消费者指定你提供给定接口定义的功能。例如(在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();
}
}
push(Node);
Node pop();
Node peek();
接口可增加您代碼的透明度。接口定義一個合同,由類實現。假設我告訴您可以成為我的幫派的一部分,但是您必須始終穿著綠色襯衫。如果您答應,那麼您正在實現一份合同,現在您必須一直穿綠色襯衫。