【问题标题】:Interfaces and methods in Java [duplicate]Java中的接口和方法[重复]
【发布时间】:2016-04-19 17:18:34
【问题描述】:

对于 Java! 我们可以在不同的类中实现不同的方法。在接口中,我们创建一个抽象方法并在实现特定接口的类中提供其实现。如果我们可以分别在类中创建和实现方法,那么创建接口的目的是什么? 请帮助我,我是 Java 新手?

【问题讨论】:

  • 很多类(Vector、ArrayList、LinkedList)都实现了same接口——List。
  • 您应该阅读一本好的 Java 书籍或教程。 Google 有数千页解释界面。

标签: java methods interface polymorphism


【解决方案1】:

考虑一个例子:

假设您正在创建一些与动物王国有关的应用程序。

现在要求您创建狗、猫、狮子等对象。

首先你会想到,既然这些都属于动物王国,我可以创建一个名为“Animal”的基类,所有东西都会继承它。现在你创造了这样的东西

class Animal {    
legs;    
family; 

eat();    
roam();  
sleep();     
makeNoise();    
}

所以所有继承动物类的动物都会有这些特征。您可以将其称为“IS-A”关系。就像狗是动物一样。

现在假设你被要求使用你的动物模拟程序参加一些科学展览。您也可以在其中使用这种设计。

现在假设有人要求你在宠物店使用模拟器。

因为你没有任何宠物行为。您所做的是在基类中添加宠物功能,并认为这会起作用。

所以现在你的程序可以创建一个具有宠物行为的狮子。奇怪!!

现在你需要把所有的宠物行为放在一个地方,并确保所有的宠物都应该拥有它。

一种方法是创建另一个具有所有宠物功能的超类并对其进行扩展。这是 JAVA 不允许的多重继承(只是谷歌致命的死亡钻石)。界面也随之而来。

接口更像是您的对象实现的一组行为。 而且由于每个对象都可以有自己的一组实现,所有这些方法都应该是抽象的。
它为您提供多态性好处,而不会出现致命的钻石死亡问题。它更像是一个合同,它定义了您的对象必须实现以下功能。

那么现在你可以做什么

interface PetBehavior{    
  befriend();    
  play();    
}  

不同继承树的类都可以实现这个接口。

【讨论】:

    【解决方案2】:

    我们这样做是为了组织数据。这是执行多次操作和结构化数据的能力。还有一种叫做向量的东西。如果对象实现了相同的方法,可以通过这个Vector进行迭代排序

    【讨论】:

      【解决方案3】:

      因为使用单个接口,您可以有多个实现。 例如,如果您有一个列表接口,则实现可以是 ArrayList 或 LinkedList。 它们具有不同的性能,并根据上下文使用。通过拥有相同的界面,如果你想改变一些东西,你必须简单地从这个改变

      List<String> arrayList = new ArrayList<String>();
      

      到这里

      List<String> arrayList = new LinkedList<String>();
      

      因为它们具有相同的方法,但以不同的方式实现

      【讨论】:

        【解决方案4】:

        我以前也有这个问题!

        我们需要接口的主要原因有 3 个:

        • 这更有意义。接口在实现类和接口之间建立了“可以用作”或“有能力”的关系。例如,你可以有一个名为Flyable 的接口,所有能飞的东西都实现了这个接口。例如。鸟、飞机和气球。这些实现类“具有飞行能力”,因为它们都具有fly 方法或接口中定义的任何内容。此外,如果一个方法需要一个Flyable 对象,程序员可以用他/她的常识传入一只鸟、一架飞机等。但是,这仍然不是很实用,就像您是否应该将 { 写在新行上一样。

        • 它使您和其他使用您的 API 或库或您正在创建的任何东西的程序员更容易创建自定义行为。 Java Swing 是一个很好的例子。如果您不知道 swing 是什么,它是一种用于创建具有“窗口”或 GUI 的程序的 API。当用户单击按钮时,您将如何告诉计算机该做什么?通过接口!有一个名为ActionListener 的接口。当用户单击按钮时,它可以让您创建自己的事情要做。您只需将ActionListener 对象传递给具有您自己的实现的方法,单击按钮时它将运行!如果我的话没有意义,让我用一句话来概括这一切。

          接口提供了一种将不同方法(使用自定义实现)作为方法中的参数传递的方法。

        编辑

        哦,我错过了一分!

        • 接口有助于多态性。假设你有一只狗、一只猫和一个鱼类,它们都没有实现任何接口但有类似的方法(movesleepeat 等)。如果要创建所有动物的数组,则只能创建Object 的数组,因为所有Java 类都继承Object。这是不安全的,因为您可以将任何您想要的内容添加到数组中,并且您需要进行强制转换才能使用这些 move sleep eat 方法。好难过! :( 如果您创建一个名为 Animal 的接口,其中包含三个常用方法并让所有三个类都实现它,则只需创建一个 Animal 数组即可。您甚至不需要将其转换为正确的类型在您可以访问移动睡眠吃之前!这太酷了!

        因此,当您的许多类具有相似的方法但不同的实现时,请记住创建接口,以便将它们全部统一!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-03-04
          • 1970-01-01
          • 1970-01-01
          • 2017-03-26
          • 2018-05-06
          • 1970-01-01
          • 2018-07-10
          相关资源
          最近更新 更多