繁体   English   中英

Java:接口的使用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM