有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用接口的优势是什么

假设您有一个接口

public interface Change {

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

}

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


共 (6) 个答案

  1. # 1 楼答案

    接口本质上保证所有继承它的方法都有自己的方法,这样你就可以在接口中安全地调用任何继承它的方法

  2. # 2 楼答案

    它将调用者期望从实现中分离出来。您有一组纯粹的方法,可以在不了解任何实现的情况下调用。事实上,像JMS和JDBC这样的库提供的接口没有任何实现

    这种分离意味着您不需要知道任何实际实现的类

  3. # 3 楼答案

    它使使用接口定义API变得更容易,因此接口的所有具体实现都在每个类中提供了预期的方法

    它还提供了一种实现多重继承的方法,这在Java中是直接类继承所不可能实现的

  4. # 4 楼答案

    接口允许您保证某些方法存在并返回所需的类型。当编译器知道这一点时,它可以使用该假设来处理未知类,就像它们具有某些已知行为一样。例如,Compariable接口保证一个实现类将能够比较到某个类似的对象,并返回一个int

    这意味着您可以比较实现这个接口的任何东西,因此您可以对任何可比较的东西进行排序,而不是编写一个方法来排序字符串,另一个方法来排序整数,另一个方法来排序LabelledBox

  5. # 5 楼答案

    Why is this better than just having individual methods in your classes, and not implementing an interface?

    因为如果类C实现了一个接口I,那么只要需要I,就可以使用C。如果不实现接口,则无法实现(即使您提供了接口要求的所有适当方法):

    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!
        }
    }
    
  6. # 6 楼答案

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


    这里有人知道汽水机是怎么工作的吗?(暗示着我们为什么要谈论这件事。)不让我告诉你

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

    这就是封装的概念。我们隐藏了汽水机的实现。除非它有一扇漂亮、透明的窗户让你看到里面,否则你真的不知道它到底是怎么工作的。你所知道的是,你投进一些现金,按下一个按钮,如果你投的足够多,你就会得到你的饮料

    此外,你知道如何使用汽水机的界面,因此只要汽水机的界面遵循通常的汽水机界面,你就可以使用它。这被称为接口契约。这台机器可以把南极洲的饮料放在传送带上,只要你拿到了饮料,它是冷的,你可以拿回零钱

    多态性是指当你使用苏打水机界面时,它可能会做不同的事情。这就是封装和多态性密切相关的原因。在多态性中,您所知道的只是您正在使用一个SodaMachine实现,它可以被更改,因此,在幕后可以做不同的事情。这就引出了多态性的驱动概念,即一个对象SodaMachine的能力,根据接口背后的机器,它实际上同时充当MonkeySodaMachineConveyorSodaMachine


    可能不是逐字逐句,但足够接近。本质上,它可以归结为两个概念:polymorphismencapsulation。如果你想澄清,请告诉我