对于Java !! 我们可以在不同的类中实现不同的方法。在接口中,我们创建一个抽象方法,并在实现特定接口的类中提供它的实现。如果我们可以单独在类中创建和实现方法,那么创建接口的目的是什么? Plz帮助我,我是Java的新手?
答案 0 :(得分:1)
考虑一个例子:
假设您正在创建一些与动物王国有关的应用程序。
现在要求你创建一只狗,猫,狮子等对象。
首先,你会想到,因为这些都属于动物王国,我可以创建一个名为'Animal'的基类,一切都将继承它。现在哟创造了这样的东西
class Animal {
legs;
family;
eat();
roam();
sleep();
makeNoise();
}
因此,继承动物类的所有动物都具有这些特征。您可以将其称为“IS-A”关系。喜欢狗IS-A Animal。
现在假设您被要求将您的动物模拟程序用于某些科学展览会。您也可以使用此设计。
现在假设有人要求您在宠物店中使用您的模拟器。
因为你没有任何宠物行为。你所做的是在基类中添加宠物功能,并认为这样可行。
所以现在你的程序可以创建一个具有宠物行为的狮子。奇怪!!
现在您需要将所有宠物行为放在一个地方,并确保所有宠物动物都拥有它。
一种方法是创建另一个包含所有宠物特征的超类并扩展它。这是多重继承,JAVA不允许(只是谷歌致命的死亡钻石)。界面也来了。
接口更像是对象实现的一组行为。 由于每个对象都有自己的一组实现,所有这些方法都应该是抽象的 它为您提供多态的好处而没有致命的钻石死亡问题。它更像是一个契约,它定义了你的对象必须实现以下功能。
现在你可以做什么
interface PetBehavior{
befriend();
play();
}
来自不同继承树的类可以实现此接口。
答案 1 :(得分:0)
我们这样做是为了组织数据。这可以多次执行操作并构建数据。还有一种叫做Vector的东西。如果对象实现了相同的方法,则可以通过此Vector
对它们进行迭代和排序答案 2 :(得分:0)
因为使用单个界面,您可以拥有多个实现。 例如,如果您有一个列表接口,则实现可以是ArrayList或LinkedList。 它们具有不同的性能并且基于上下文使用。通过拥有相同的界面,如果你想改变一些东西,你只需要改变这个
List<String> arrayList = new ArrayList<String>();
到这个
List<String> arrayList = new LinkedList<String>();
因为他们有相同的方法,但以不同的方式实施
答案 3 :(得分:0)
我以前也有这个问题!
我们需要接口有三个主要原因:
更有意义。接口创建了“可以用作”或“具有”实现类和接口之间关系的能力。例如,您可以拥有一个名为Flyable
的接口,所有可以飞行的东西都可以实现此接口。例如。鸟,飞机和气球。这些实现类“具有飞行能力”,因为它们都具有fly
方法或接口中定义的任何方法。此外,如果一个方法需要一个Flyable
对象,程序员可以用他/她的常识传入一只鸟,一架飞机等。但是,这仍然不太实际,就像你是否应该写{在新线上无所谓。
它使您和使用您的API或库或其他任何创建者的其他程序员更容易创建自定义行为。 Java Swing就是一个很好的例子。如果您不知道swing是什么,它是一个用于创建具有“窗口”或GUI的程序的API。当用户点击按钮时,您如何告诉计算机该做什么?通过界面!有一个名为ActionListener
的界面。它允许您在用户单击按钮时创建自己要做的事情。您只需将ActionListener
对象传递给具有您自己的实现的方法,并在单击该按钮时运行它!如果我的话没有意义,让我用一句话来总结这一切。
接口提供了一种方法,可以将不同的方法(使用自定义实现)作为方法中的参数传递。
修改
哦,我错过了一点!
move
,sleep
,eat
等)。如果要创建所有动物的数组,则只能创建Object
数组,因为所有Java类都继承Object
。这是不安全的,因为那样你可以在数组中添加你想要的任何东西,并且你需要进行强制转换才能使用那些移动睡眠吃方法。好难过! :(如果你创建一个名为Animal
的接口,它包含三个常用方法并让所有三个类实现它,你可以创建一个Animal
数组。你甚至不需要转换它在你可以进入睡眠前吃到正确的类型!这有多酷!所以请记住,当你的很多类都有类似的方法但不同的实现只是UNITE THEM ALL时创建接口!