Language agnostic 什么是类接口?
我目前正在努力完成代码,而“接口”一词不断出现!我想弄清楚什么是界面。你能给这个词下个定义吗?还有,究竟是什么构成了“类接口”?它是面向世界的外部面孔。通常是它公开的一组公共方法(成员) 但从技术上讲,它们是两种不同的东西 接口将是一个公共合同。e、 gLanguage agnostic 什么是类接口?,language-agnostic,interface,duplicates,Language Agnostic,Interface,Duplicates,我目前正在努力完成代码,而“接口”一词不断出现!我想弄清楚什么是界面。你能给这个词下个定义吗?还有,究竟是什么构成了“类接口”?它是面向世界的外部面孔。通常是它公开的一组公共方法(成员) 但从技术上讲,它们是两种不同的东西 接口将是一个公共合同。e、 g interface ILogger { void Log(String str); } 然后,一个类将“实现”这个接口——在某种程度上说它提供了这个功能 class ConsoleLogger : ILogger { public C
interface ILogger
{
void Log(String str);
}
然后,一个类将“实现”这个接口——在某种程度上说它提供了这个功能
class ConsoleLogger : ILogger
{
public ConsoleLogger() { ... }
public void Log(String str)
{
Console.WriteLine("Console Logger " + str);
}
// private stuff
}
此服务/接口的用户不必关心它是如何实现的或是谁在实现它?通过依赖接口,可以随意切换实际实现。我认为定义接口的一个好方法如下 接口是一种约定,指定了一组方法、字段和属性,这些方法、字段和属性可用于任何实现对象 不同语言之间的实际实现可能有一些有趣的小差异,但原则是成立的
我曾考虑将实现的接口添加到上面的列表中,但没有添加,因为它似乎有点过于语言特定。我认为这没关系,因为最终效果几乎是一样的。增加更多的接口只是在合同中添加更多的方法、字段和属性 接口是类可以推动的一组方法的定义。它主要用于接口多态性。一般来说,接口只是“类在世界其他地方的外观” 例如,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 Movable{
moveStraight();
moveLeft();
moveRight();
stop();
}
所以现在有一个类,比如说,Car可以实现可移动的接口。这就是所谓的合同。如果类Car实现接口Movable,Car保证为Movables中声明的所有方法提供实现
声明总之,在特定于语言的编程上下文中,接口通常作为类型(定义2)进行处理。通常在理论或设计环境中,您会在较少的场合找到第一个定义 接口的经典现实例子是汽车的控制 刹车、油门和车轮将是接口。 引擎和其他机械方面将是实现。 这些机械方面可以改变,我们不知道,因为我们的界面保持不变
这是接口的强大功能,它隐藏了实现细节,因此我们可以在更高的抽象级别上工作。我们通常可以直接使用界面的功能,而不必担心界面下面的代码是如何实现的。谢谢大家的回答。我现在明白这个词了。也有很多有用的信息。