我目前正在通过代码完成工作,“界面”这个词不断弹出!我试图弄清楚接口是什么。你能定义这个词吗?还有什么实际上构成了“类接口”?
8 回答
我认为定义接口的好方法如下
接口是指定一组方法、字段和属性的合同,这些方法、字段和属性可用于任何实现对象
不同语言的实际实现可能有一些有趣的小差异,但原则是成立的。
我考虑将已实现的接口添加到上面的列表中,但因为它似乎有点过于特定于语言,所以将其搁置。我认为这没关系,因为最终效果几乎相同。添加更多接口只是在合约中添加更多方法、字段和属性。
一般来说,接口只是“类在世界其他地方的样子”。
例如,Java 中的这个类:
class MyClass {
private string data;
private string Foo() {...}
public void Bar(string s){...}
}
可以说它的界面中只有Bar功能。在内部,它还有一些其他成员,但它们是私有的,因此外部世界看不到它们。
更常见的是,接口也是语言中的特定类型,例如下面的 MyClass 实现了 IMyClass 接口:
interface IMyClass {
public void Bar(string s);
}
class MyClass implements IMyClass {
private string data;
private string Foo() {...}
public void Bar(string s){...}
}
该接口现在用代码表示,因此任何时候需要 IMyClass 类型的变量,都可以使用 MyClass 类型的对象,因为它实现了正确的接口。
类的接口是其他类可以看到的“公共面孔”。它将类的实现与它与其他类交互的方式分开。这样就可以换出不同的实现,并且其他类不需要知道接口背后的任何内容。
一个接口可以包括数据和函数成员。
它是世界的外部面孔。通常是它公开的一组公共方法(成员)。
但是从技术上讲,它们将是两件不同的事情
接口将是一个公共合约。例如
interface ILogger
{
void Log(String str);
}
然后一个类将“实现”这个接口——在某种程度上说它提供了这个功能
class ConsoleLogger : ILogger
{
public ConsoleLogger() { ... }
public void Log(String str)
{
Console.WriteLine("Console Logger " + str);
}
// private stuff
}
此服务/接口的用户不必关心它是如何实现的或谁在实现它?通过依赖接口,可以随意切换实际的实现。
接口是类可以实现的一组方法的定义。它主要用于接口多态。
接口就像一个类,但不完全是。它具有类似于类的特征,但它不是接口。接口具有变量和方法,“就像类一样,但接口中声明的方法默认是抽象的(只有方法签名,没有主体)”。
接口有两个定义。这取决于在什么上下文中使用术语接口。
- 类接口是指一个类的所有实现的公共方法。
接口作为类型。即使用关键字interface 来声明一个接口。
interface Movable{ moveStraight(); moveLeft(); moveRight(); stop(); }
所以现在一个类,比方说,Car 可以实现接口 Movable。这就是所谓的合同。如果 Car 类实现了 Movable 接口,Car 保证为 Movables 声明中声明的所有方法提供实现。
总而言之,通常接口在特定语言的编程上下文中被称为类型(定义 2)。通常在理论或设计环境中,您会在较少的情况下找到第一个定义。
接口的经典现实生活示例是控制汽车。
休息、加油和车轮将是界面。发动机和其他机械方面将是实施。这些机械方面可以改变,我们不知道,因为我们的界面保持不变。
这就是接口的力量,它隐藏了实现细节,因此我们可以在更高层次的抽象上工作。我们通常可以直接使用接口的功能,而不用担心它下面的代码是如何实现的。