资讯详情

关于Java:接口的目的

嗯,我认为接口是一种强制对象实现一定数量功能而不继承的方法。有点像合同。我知道他们的意思。

但是,如果界面中的所有内容都是:

public interface animal{

void eat(object food);

}

它没有这样的实现,所以无论谁使用你的界面,每次都必须从头开始。

如果你创造了很多类别,所有这些类别都实现了这些特征,而且只是有点不同,那么这将是一项非常困难的工作。

我很感激你帮我解决这个问题,因为我知道这很重要。

抱歉,我的"打字错误"太糟糕了,卡尔只是按了按钮,没有仔细阅读。我脑子里好像有很多。当你看到错误时,你会觉得很有价值。

stackoverflow.com/a/24436493/1286942

接口是在Java创造多重继承的唯一方法。

假设你创建了一个类别Animal。包括人类在内的所有动物都是如此。每一种动物都继承了常见的吃、呼吸等方法。

但现在假设你有一个MathProblem类。你希望有些类可以通过将问题传递给你solve(MathProblem problem)方法来解决这个问题。你知道,一个Human,也可以一个Computer,这个数学问题可以解决。所以他们都需要能够解决这个问题。也许你可以扩展一些有这种方法的计算机。MathSolver但是人类已经扩展了动物,不能扩展任何其他东西。因此,更好的方法是使用它MathSolver做接口,让Human、Computer以及任何其他需要解决问题的类别。

还请注意,Human和Computer由于它们的对象不同,解决问题的方法可能会完全不同。这就是接口的最佳用途。定义一些跨越多个继承层次结构的功能,可以实现非常不同的功能,但可以传递给任何接受它们的方法。想想Comparable接口;它不是某种对象所拥有的,所有类型的东西都可以比较,通常以非常不同的方式。但你总能调用一个List的Comparable对象的sort,因为你知道它们有一个特定的顺序,不管它们是什么Numbers、Animals、Computers或者其他(只要它们实现了)Comparable并定义它们的顺序)。

1-我认为重要的是补充一点,继承有两个目的:(1)允许继承的对象取代基本对象;(2)允许继承的对象使用基本行为。接口对第二个目的没有用,但对第一个目的非常有用。

我更喜欢组合而不是继承。这样,你就可以在一个类中实现(例如eat()这类动物作为数据成员合并到所有动物中。只写一次,重用一次,但不能以一种方式将一个功能显式绑定到另一个功能。

假如你有两种(或十种)不同的饮食方式,你可以根据需要替换它们。

虽然在这种特殊情况下,组合似乎是避免代码复制的最佳方式,但这个答案往往会让人觉得界面在Java没用。别忘了还有另一个设计原则"程序到接口,而不是具体的类别"。所以Java接口几乎可以在任何地方理解和使用。

好点。我只是编辑并添加了它。"换出"位,我认为这可能会解决这个问题。谢谢你。

你混淆了界面和继承。它们是可以相互补充的不同概念。如果一切都是EAT方法只是有点不同,所以你可以创建一个包含公共代码的基类,并添加不同的部分overriden该方法从子类中调用。接口仍然可以实现基类。希望是清楚的。

您应该将接口视为行为的权威声明,它首先与实现无关。

如果要避免代码重复,可以结合使用接口使用抽象基类。在这里,您可以在所有接口中重复所有内容,否则。

H.T.BR/>托马斯

一般化

使用Java接口可以实现跨子类的泛化。泛化意味着这里的子类以不同的方式实现相同的行为。

标准化

接口允许标准化所有子类。它指定了子类必须具备的东西"什么",但不要强迫它应有的方式。

100%提取

接口主体提供100%的抽象,以免错过抽象方法的任何实现。如果我们使用抽象,这是不可能的。

去耦合(松耦合)

在开发应用程序时,通过使用接口松耦合与最终用户交互的代码[b l c]上运行代码。

多重继承

我们可以通过使用接口实现不可能的使用类别MI。

还有旧线,我知道。但我刚读到。"接口是Java中创建多重继承的唯一方法"。因为委托(或卡尔所说的)是非常错误的"复合")是获得多重继承的唯一途径(记住:"委托是继承",几乎是这样)。

你只需要告诉开发人员接口"嘿,别忘了委托这个或那个类别"!接口只需要作为正确的提醒(或通常是:实现),但它们不能继承任何代码。根本不需要使用多个继承接口。

事实上,你不需要界面来创建一个工作程序,它们只是没有任何功能或功能代码的助手。顺便说一句,托马斯对抽象的看法非常正确,比界面更重要,因为这就是你可以重用代码的地方。

通常,当我写的时候Java在应用程序中,我只在最后创建接口作为未来程序员的助手。或者我根本没有创建任何接口;d

接口不是帮手。它们不是提醒开发人员实现方法的合同。接口将被编码,以便您可以从需要的功能中分离特定的实现。

使用接口更多的是了解你想要什么,而不是你需要关心使用代码的细节。

例如,在我们的业务层/数据访问层中,我们经常使用接口的方法之一。

因为我们的业务层(BL)程序集(DAL)因此,程序集直接通信,DAL无法与BL直接通信。如果DAL使用对象而不是单个字段会发生什么?你必须定义自己的DAL对象,并使用刚输入处理水合物。基本上,更多的工作、更多的资源消耗和更多的对象表示相同的数据,这使得维护成为一场噩梦。

但是,如果你在DAL中定义接口,您可以告诉DAL消费者期望什么?然后,你可以BL实现这些接口并传递接口的例子,而不是BL对象。

界面是抽象的细节,而这些细节并非绝对必要。

[编辑]如果有很多对象可以做类似的事情,使用可重写/虚拟方法组合接口和基类可能比只使用接口更有用。

If you are creating a number of classes all implementing such features and the implementation is only slightly different, this is going to be a lot of hard work.

在这种情况下,你可以很容易地在类的层次结构中创建另一层Animal,但对所有以某种方式吃东西的动物来说,它是祖先。

class Herbivore implements Animal {

public void eat(Object food) {

...

}

}

class Cow extends Herbivore..

class Horse extends Herbivore..

允许您使用super.eat()覆盖eat,只改变小部分。

您应该期待代码重用和组件包装。然后,如果你的界面真的不能描述类本身,而只是它的一个组件,你可以遵循卡尔·结合马纳斯特的建议。

是的,你需要随时实现它,但你每次都可以不同地实现它,任何调用它的类别都不需要担心它是如何实现的。

例如,如果你有一个包含一组动物的动物园对象(new tiger()、lion()、bear(),那么你的动物园可以集合在一起a.eat()中的每一种动物a都会起作用。动物园不在乎以完全不同的方式吃三种不同类型的动物。

主要原因之一是,您可以使用接口引用(类似于抽象方法)来创建对象。当您这样做时,每个实现接口的对象都可以分配给它。例如,如果狗和汽车可以清洗,你可以这样做:

可清洗WD=new dog();

可洗厕所=新车();

如果washable具有public abstract方法wash()可执行以下操作:

WD。

WC.WAW();

调用它们各自的方法。这也意味着您可以接受一个接口作为方法的参数,这意味着您不需要添加不必要的代码来处理每个接口类别。

有关更详细的解释,请参阅此处:http://www.artima.com/objectsandjava/webuscrit/polymorphisminterfaces1.html

这并不是一个真正的答案,只是一个我认为在考虑接口时有用的例子,而是考虑需要该方法的接口Comparable。

public int compareTo(T anotherObject)

用户可以随意实现这一点。例如,如果是一个Person implements Comparable,它可以基于姓氏,然后是名字,忽略大写。或者,它可以根据用户想要的年龄来决定。由于允许用户使用此接口,因此实现此接口非常有用Collections.sort()这些东西需要排序的元素可比(否则如何比较?)

你必须把它倒过来。先考虑实现,而是先考虑行为(如方法签名描述)。然后在基本类别中实现适当的行为,以提供更灵活和可扩展的系统。你很快就放弃了"契约式设计",但它是一个关键的设计策略,也是Web服务、SOA等的基础。

and it has no implementation as such

then whoever uses your interface has

to write it from scratch..every time.

每个接口的实现都可以不同。关键是你可以在不知情的情况下使用接口。

public interface ILogger

{

void WriteMessage(string message);

}

您的应用程序可以使用ILogger接口来记录错误/调试信息等,但不管如何实现记录器,它可以是FileSystemLogger或DatabaseLogger或任何其他实现。因此,您可以在任何时候替换实现,而不必更改提到日志记录的代码中的所有位置。

标签: 旧线网套连接器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

 锐单商城 - 一站式电子元器件采购平台  

 深圳锐单电子有限公司