[英]Java: Uses of Interface
这听起来像是一个菜鸟问题,但是我正在搜索什么是接口,我找到了这个示例。
这有什么区别
interface InterfaceA
{
void interfaceMethodA();
}
public class ImplementingClassA
implements InterfaceA
{
public void interfaceMethodA()
{
System.out.println("interfaceA, interfaceMethodA, implementation A");
}
}
除了这个。
public class ImplementingClassA
{
public void interfaceMethodA()
{
System.out.println("interfaceA, interfaceMethodA, implementation A");
}
}
我没有发现任何区别,如果是的话,这些接口的用途是什么?
当您有多个需要执行相同操作的类,但每个操作将稍有不同甚至什至非常不同时,则需要一个接口。 例如,假设您要某些食物可食用。 如果您继承一种饮食方式,则必须以完全相同的方式食用所有食物。 这就是为什么您使用像这样的界面的原因...
interface Iedible {
public void eat();
}
因此,根据定义,如果某种东西实现可食用,我知道您可以食用它,但是如何食用它的行为可能有所不同。 例如汤,您将不得不在要咬蛋糕的地方饮。
在这种情况下,我们有一个cookie,我们都知道cookie中只有5位。
public static class Cookie implements Iedible {
int bites = 5;
public void eat() {
if (bites > 0) System.out.println("*bites cookie* you have only " + --bites + " bites left");
else System.out.println("no more cookie left :(");
}
}
现在我们有了蔬菜,而且我们知道您永远不会用完蔬菜,因为您被咬的东西很小。
public static class Vegetable implements Iedible {
public void eat() {
System.out.println("Everyone knows vegetables are not edible but you try to eat it anyway *takes a microscopic bite*");
}
}
因此,我们看到Cookie和Vegetables都可以使用eat(),但是这些eat()动作的实现方式根本不同。
现在这里是界面真正发光的地方。 现在,我需要一个名为Dinner的类,该类可以接受可以吃的任何对象,然后我想要一个方法,该方法可以让我在餐桌上尝试所有东西。
public static class Dinner {
ArrayList<Iedible> foods = new ArrayList<Iedible>();
public Dinner(Iedible... food) {
for (int i = food.length - 1; i >= 0; i--)
foods.add(food[i]);
}
public void tryEverything() {
for (int i = foods.size() - 1; i >= 0; i--)
foods.get(i).eat();
}
}
在上面的示例中,您仅向两个类提供了相同的方法,因此您将无法在没有接口的情况下制作晚餐类,因为仅因为两个类具有相同的方法,否则编译器将不知道,除非您实现接口。
当然,这是我们的操作界面...
public static void main(String[] args) {
Cookie cookie = new Cookie();
Vegetable vegetable = new Vegetable();
Dinner dinner = new Dinner(cookie, vegetable);
dinner.tryEverything();
}
我希望这可以帮助您获得一些接口的实用思想,并理解上面给出的示例如果没有接口就无法复制。
首先,它是合同的一部分,请考虑该接口的另一种实现-
public class ImplementingClassB
implements InterfaceA
{
public void interfaceMethodA()
{
System.out.println("interfaceA, interfaceMethodA, implementation B");
}
}
现在你可以使用
InterfaceA foo = new ImplementingClassA();
InterfaceA bar = new ImplementingClassB();
foo.interfaceMethodA();
// and/or
bar.interfaceMethodA();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.