Java中的接口和方法

Interfaces and methods in Java

本问题已经有最佳答案,请猛点这里访问。

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


举个例子:

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

现在,您需要创建一个狗,猫,狮子等对象。

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

1
2
3
4
5
6
7
8
9
class Animal {    
legs;    
family;

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

所以所有的动物都有这些特点。你可以称之为"IS-A"关系。就像狗是动物。

现在假设你被要求在一些科学展览会上使用你的动物模拟程序。你也可以用这个设计。

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

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

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

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

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

接口更像是对象实现的一组行为。因为每个对象都可以有自己的实现集,所以所有这些方法都应该是抽象的。它给你带来了多形态的好处,没有致命的死亡钻石问题。它更像一个契约,定义对象必须实现以下特性。

所以现在你能做什么

1
2
3
4
interface PetBehavior{    
  befriend();    
  play();    
}

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


我以前也有这个问题!

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

  • 这更有意义。接口在实现类和接口之间创建了"可以用作"或"有能力"关系。例如,您可以有一个名为Flyable的接口,所有可以飞行的东西都实现了这个接口。例如鸟、飞机和气球。这些实现类"能够飞行",因为它们都有一个fly方法或接口中定义的任何方法。另外,如果一个方法需要一个Flyable对象,程序员就可以用常识通过一只鸟、一架飞机等。但是,这仍然不是很实际,就像你是否应该在新行上写并不重要。

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


    interfaces provide a way to pass around different methods (with custom implementations) as parameters in methods.

编辑

哦,我错过了一分!

  • 界面有助于多态性。假设您有一个dog、一个cat和一个fish类,它们都不实现任何接口,而是具有类似的方法(movesleepeat等)。如果你想创建一个你所有的动物的数组,你只能创建一个EDOCX1的数组8,因为所有的Java类都继承了EDOCX1,8。这是不安全的,因为这样您就可以向数组中添加您想要的任何内容,并且您需要执行强制转换才能使用这些移动的睡眠-进食方法。如此悲伤!:(如果创建一个名为Animal的接口,该接口包含三个通用方法,并使所有三个类都实现它,则只需创建一个Animal数组。你甚至不需要把它投到正确的类型,然后你就可以进入移动睡眠吃!太酷了!

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


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

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

对此

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

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


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