这可能听起来像一个菜鸟问题,但我正在寻找什么是接口,我找到了这个例子。
这是什么区别
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");
}
}
我没有发现任何区别,如果有的话,接口用于什么?
答案 0 :(得分:1)
如果您有多个类需要执行相同的操作但操作将略有不同甚至非常不同,那么您需要一个接口。例如,假设您想要食用某些食物。如果你继承了一种饮食方法,所有的食物都必须以同样的方式食用。这就是为什么你使用这样的界面......
interface Iedible {
public void eat();
}
所以根据定义,如果某些东西实现了Iedible,我知道你可以吃掉它,但是吃它的行为可能会有所不同。例如汤,你必须啜饮你必须咬的蛋糕。
在这种情况下,我们有一个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和蔬菜都能吃()但是那些eat()动作的实现从根本上是不同的。
现在这里是界面真正闪耀的地方。现在我想要一个名为晚餐的课程,它可以接受任何可以食用的物品,然后我想要一种能让我在餐桌上尝试所有东西的方法。
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();
}
我希望这可以帮助你获得一些关于接口的实用想法,并理解我刚刚提供的上述示例在没有接口的情况下无法复制。
答案 1 :(得分:0)
它是第一个实例中合同的一部分,考虑接口的另一个实现 -
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();