【问题标题】:Why interface really needed when normal class can do the same work [duplicate]当普通类可以做同样的工作时,为什么真的需要接口[重复]
【发布时间】:2014-07-02 01:00:07
【问题描述】:

我一直想知道界面的真正用途。请检查以下代码。

interface Animal {
    public void eat();
    public void travel();
}


public class MammalInt implements Animal{

    public void eat(){
        System.out.println("Mammal eats");
    }

    public void travel(){
        System.out.println("Mammal travels");
    } 

    public int noOfLegs(){
        return 0;
    }

    public static void main(String args[]){
        MammalInt m = new MammalInt();
        m.eat();
        m.travel();
    }
} 

在上面的代码中,如果我从类声明中删除 implements Animal,代码仍然可以正常工作,没有任何区别。那么接口的实际用途是什么。 ?

【问题讨论】:

  • 请至少做 5 分钟的研究
  • 您在发布问题之前是否阅读了规则?这个问题已经被问了一百万次了,我相信如果你把它写在谷歌第一个链接上会给你你需要的信息
  • @user3635242 确实人们对你很苛刻,也许比他们应该的多一点。但是你尝试了哪些谷歌搜索?这个问题已经被问过很多次了,你可以通过这个问题的主题行的变体找到其中一些答案。由于您没有提及其中任何一个,因此人们会怀疑您没有努力自己找到它们。
  • 您的问题实际上与其他问题没有什么不同。请阅读上面提到的一些链接;他们都问为什么要在不严格需要的时候使用接口,并给出了答案。另请注意,并非每个 类都需要接口;因此,如果您的问题是“为什么在这种特定情况下我需要一个,假设这是整个程序”-那么答案是您不需要。但实际上程序要复杂得多,因此可以从接口带来的好处中受益,正如其他链接中提到的那样。
  • 不要从接口中获取那些方法。在你的课堂上注释掉他们的定义。

标签: java jsp interface


【解决方案1】:

毫无疑问,即使此时没有界面,您的代码也可以正常工作,但是。实现一个接口可以让一个类对它承诺提供的行为更加正式。接口在类和外部世界之间形成一个契约,这个契约在编译器构建时强制执行。如果您的类声称实现了一个接口,则该接口定义的所有方法都必须出现在其源代码中,然后该类才能成功编译。

例如,如果您有多个动物类,每个类都实现 Animal,如果以后您想更改 Animal 接口的结构,它可以帮助您更轻松地更改所有动物类的结构。

另一个例子,假设你在一个组对象上工作,领导告诉你和其他人根据他给定的结构(接口)创建一些类,实现接口确保你得到所有方法名称和结构正确。如果后来领导认为类的结构不好,他会改变接口,迫使你改变你的类。

如需了解更多信息,请阅读What is an interfaceUndersanding interfaces and their Usefullness

【讨论】:

  • 谢谢..我现在完全明白了..你说的很清楚... :) 来自比你年轻几岁的爱。:)
【解决方案2】:

接口的目的不是做事,而是定义实现接口的类必须做的事情。在您的情况下,接口 Animal 定义了可以在 Animal 上调用的函数。因此,任何依赖于 Animal 接口的函数/类都知道实现接口 Animal 的类将实现哪些函数。

例如:假设有一种方法可以使动物旅行,例如:

 public void goToDestination(Animal a)
 {
     a.travel();
 }

现在这个函数可以在实现 Animal 的类型的 Object 上调用函数 travel,而无需知道该对象的确切类型是什么(它可以是 MammalInt,也可以是 Amphibian 等)。这就是接口的力量。这只是对接口的基本外行解释,您可以 Google 并阅读有关接口的更多信息。

【讨论】:

  • 接口的目的不是做事,而是定义实现接口的类“必须”(而不是“可以”)做的事情。
  • @WhoAmI 非常感谢您指出!!
  • @WhoAmI 我认为can 的措辞更好...对象可以调用其方法。类必须实现它们,但接口确实定义了实现该接口can 的类的对象做什么,而不是它must 做什么。不需要调用对象具有实现的每个方法。
  • @YTowOnt9 - 你是对的。类“必须”支持什么(能够做到)。 kakarot - 我很抱歉 :)
猜你喜欢
  • 1970-01-01
  • 2013-09-06
  • 2012-11-21
  • 2018-11-17
  • 1970-01-01
  • 1970-01-01
  • 2016-01-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多