我是自学Java,而且我一直在关于接口的章节。我根本无法理解它们是如何在Java中工作的。
我相信我完全理解界面的含义以及它们在日常情况和技术中的应用方式。
但是当涉及到Java,代码方面和逻辑方面时,我陷入困境。我不明白。这个概念是如何运作的?
假设我有3个对象和1个接口对象。 2对象是ObjectCalculatingA,ObjectCalculatingB,ObjectMathFunctions和ObjectInterface。
据说在ObjectInterface中必须有一些对ObjectMathFunctions的引用,因此ObjectCalculatingA和B只能访问ObjectMathFunctions中的数学函数而无需在A和B中再次写入它们。
我是对的吗?
答案 0 :(得分:4)
存在便于polymorphism的界面。它允许声明一个合同,任何实现接口的类必须遵守。因此,通过查找 事物之间的通用性 ,可以实现 抽象 和模型复杂性。
一个例子?形状怎么样?所有形状都有一个区域,对吗?所以你可以拥有以下课程:
然后假设你有另一个类,它允许你收集形状,并返回总面积:
for (Shape shape in shapes)
{
area += shape.area() //This is polymorphism
}
在上面的示例中,我们不关心形状是正方形还是圆形。我们也可以接受。我们只关心它实现了 Shape 接口。每个对象都将提供自己的区域自定义实现 - 这些内部细节并不重要,只是它尊重 区域合同 。现在看看我们如何管理复杂性?我们可以使用这个类,而不必担心内部发生的所有事情。此时它对我们来说非常重要,而不是 它是如何做到的,这让我们 专注于手头的问题 不会因复杂的细节而分心。
这种多态性是面向对象编程被认为是编程中如此强大的进化步骤的原因之一。面向对象编程中的其他关键基础概念是:
。 。 。你还需要学习这些。
抽象基类与接口
正如评论所说,实现多态的另一种方法是使用抽象基类。你应该选择哪个?
使用实现它的接口类将具有自己的层次结构和依赖项。例如媒体播放器。电影播放器和声音播放器可能具有完全不同的基类,因此请使用界面。
当事物之间存在某些共性时,请使用Abstract基类,但具体情况会有所不同。例如,消息解析框架。
答案 1 :(得分:3)
简单的男人用语言。接口是一个契约,实现接口的类需要遵守合同。可以有许多相同接口的实现,用户可以选择他们希望使用的实现。有关更多详细信息,我建议您阅读像HeadFirst JAVA这样的书。
一旦开始软件开发,您就会明白很多次您会遇到一段已经实现的代码,您认为这些代码没有得到正确实现。但与此同时,你的一位同事认为它正确实施并符合他的目的。这是接口发挥作用的地方。您认为此实施适用于他的同事可以继续使用当前的实施,而您可以实施新的实施,但您需要确保它遵守界面,以便将来如果您的实施更好,您的同事将有一个oion切换。
List<String> myList = new ArrayList<String>();
在上面的例子中,arraylist是List接口的实现。考虑这个例子,ArrayList不符合您的要求,因此您可以执行以下操作。
myList = new LinkedList<String>();
这是'编码接口'的力量
答案 2 :(得分:2)
从您的示例中可以看出,您对面向对象编程缺乏基本的了解。你正试图学习如何在没有学会站起来的情况下跑步。
在您的示例中,您假设有一个类ObjectMathFunctions
。这根本不是面向对象的,类应该建立一个真实的概念。
首先应该了解类和对象的工作原理。一个类不仅仅是任意的代码划分,它模拟真实的东西。示例:汽车,车轮等
了解之后,了解继承:Car有一个getWeight()方法。 Wheel也有getWeight()
方法。嗯,也许它们都是更广泛概念的细分:PhysicalThings。每个PhysicalThing都有一个getWeight()
方法。
在此之后,了解子类中的重写方法,了解抽象类等等。
现在您将了解interface
与抽象类非常相似。你已经做过一些练习,你已经遇到了问题“这是一个PhysicalThing
,但它也是CanExplode
(例如汽车轮,炸药等)。这个单一的继承模型很烦人,怎么样我能解决这个问题吗?“。
答案 3 :(得分:2)
如果你知道一个类可以包含数据和对数据进行操作的函数,那么接口只是一个类必须实现的函数列表。
带一个灯开关接口,ILightSwitch ......
public interface ILightSwitch {
void turnOn();
void turnOff();
}
如果一个类实现上面的那些函数,那么实现接口。
e.g。 LightSwitch类可能是
public class LightSwitch implements ILightSwitch {
boolean on = false;
void turnOn() { on = true; }
void turnOff() { on = false; }
}
LightSwitch类实现 ILightSwitch接口。