使用接口的优势是什么

2022-09-01 17:56:19

假设您有一个界面

public interface Change {

    void updateUser();
    void deleteUser();
    void helpUser();

}

我已经读到接口是Java实现多重继承的方式。实现一个接口,然后可以访问其方法。我不明白的是,这些方法在接口中没有任何主体,所以你需要在类中给它们一个主体。因此,如果一个接口由多个类实现,则需要在多个类中为该方法指定一个主体。为什么这比在类中只使用单个方法而不实现接口更好?


答案 1

我在大学的教授曾经用一个很棒的轶事来描述多态性和封装。事情是这样的。


这里有人知道汽水机是如何工作的吗?(提示困惑的目光,为什么我们甚至会谈论这个。不?让我告诉你。

你放下了零钱,机器里面有一只小猴子,它会计算你所有的零钱,以确保你投入足够的钱。当你按下苏打水的按钮时,一个小灯亮了,告诉猴子你按下了哪个按钮,如果你输入了正确的零钱,他会抓住你的选择,把它扔进小洞里,让你拿起你的苏打水。

这就是封装的概念。我们隐藏了苏打水机的实现。除非它有一个花哨的,清晰的窗户让你看到里面,否则你真的不知道它是如何工作的。你所知道的是,你投入了一些现金,按下了一个按钮,如果你投入了足够的钱,你就得到了你的饮料。

除此之外,您知道如何使用汽水机的接口,因此,只要机器的接口遵循通常的汽水机接口,您就可以使用它。这称为接口协定。这台机器可以将来自南极洲的饮料放在传送带上,只要你得到你的饮料,它是冷的,你得到的零钱。

多态性是当你使用苏打水机界面时,它可以做不同的事情。这就是为什么封装和多态性密切相关的原因。在多态性中,您所知道的只是您正在使用可以更改的实现,因此,可以在幕后完成不同的事情。这导致了多态性的驱动概念,即一个对象(the)实际上既充当 a 又依赖于接口后面的机器的能力。SodaMachineSodaMachineMonkeySodaMachineConveyorSodaMachine


可能不是逐字逐句,但足够接近。从本质上讲,它归结为两个概念:多态性和封装。如果您想澄清,请告诉我。


答案 2

为什么这比在类中只使用单个方法而不实现接口更好?

因为如果一个类实现了一个接口,你可以在预期的时候使用 。如果不实现接口,则无法执行此操作(即使您提供了接口要求的所有适当方法):CICI

interface I {
    void foo();
}

class C1 implements I {
    public void foo() {
        System.out.println("C1");
    }
}

class C2 {  // C2 has a 'foo' method, but does not implement I
    public void foo() {
        System.out.println("C2");
    }
}

...

class Test {
    public static void main(String[] args) {
        I eye1 = new C1();  // works
        I eye2 = new C2();  // error!
    }
}