可能重复:
Java接口实际上是如何使用的?
我不是从一个学术流行语的观点来谈论,而是从一个实际的开发者的角度来看.
举个例子: -
Class1 implements Interface
public String methodOne() {
return "This is Class1.methodOne()";
}
public String methodTwo() {
return "This is Class1.methodTwo()";
}
}
Class2:
Class2 implements Interface
public String methodOne() {
return "This is Class2.methodOne()";
}
public String methodTwo() {
return "This is Class2.methodTwo()";
}
}
Run Code Online (Sandbox Code Playgroud)
使用界面: -
Client {
Interface intface = new Class1();
intface.methodOne();
intface.methodTwo();
Interface intface = new Class2();
intface.methodOne();
intface.methodTwo();
}
Run Code Online (Sandbox Code Playgroud)
但是,与写作相比有什么好处: -
Client {
Class1 clas1 = new Class1();
clas1.methodOne();
clas1.methodTwo();
Class2 clas2 = new Class2();
clas2.methodOne();
clas2.methodTwo();
}
Run Code Online (Sandbox Code Playgroud)
并完全绕过接口.
为了增加一层代码,接口似乎只是一个额外的代码层,或者除了"以下是您正在访问的类的方法有哪些"之外还有更多的代码?
Pét*_*rök 19
使用独立类时,您不需要接口.但是,当您拥有类型层次结构时,接口确实是必不可少的.
你的简单例子并没有真正公正,但让我们将你的界面重命名为更有用和具体的东西,例如一个Sorter可以获取项目列表并对其进行排序的算法.您可以实现几种不同的排序算法,并且您可能希望根据上下文更改所使用的算法(即QuickSort对于大型数据集更快,但BubbleSort更适合小型数据集等)所以你不需要想要将客户端代码绑定到一个特定的算法.通过使用多态Sorter类型(实现为接口),您可以将不同的具体分类器对象传递给客户端,而无需了解(和关心)它实际使用的算法.您可以随时引入更好的排序算法,或者删除一个被证明效率低下的算法,而不会让客户注意到任何事情.
没有接口,这样的壮举是不可能的.替代方案是直接从(可能是重复的)if-else调用排序方法,或者在整个地方切换块,在添加/删除排序算法时忘记更新所有位置时不可避免地会引入错误. ..更不用说你需要在每次这样的改变后重新编译所有客户端代码:-(
假设您想要一个具有"Method1"和"Method2"两种方法的对象集合.并且您不希望以编程方式检查集合中的每个实例的类型.
对象的集合,接口保存您执行此操作的工具.
它称为多态,它非常有用.
| 归档时间: |
|
| 查看次数: |
12538 次 |
| 最近记录: |