Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:迭代器、Iterable接口还是抽象类?_Java - Fatal编程技术网

Java:迭代器、Iterable接口还是抽象类?

Java:迭代器、Iterable接口还是抽象类?,java,Java,我的问题很简单,这一切都是在我意外地看到Iterable接口的源代码之后开始的。我想我会发现这个接口有一个名为AbstractIterator之类的抽象类的成员,但事实证明它是一个接口 为什么??为什么迭代器不是一个抽象类? 接口被用来定义一个特定的特性——这就是为什么在很多接口上会出现“能干”的结尾。但事实证明,java持有不同的观点。请解释一下 注意:在我看来,列表、集合等也应该是抽象类——所以我的问题也是关于它们的…迭代器的每个实现对于它所迭代的集合来说都是唯一的。这些代码不足以保证抽象基

我的问题很简单,这一切都是在我意外地看到Iterable接口的源代码之后开始的。我想我会发现这个接口有一个名为AbstractIterator之类的抽象类的成员,但事实证明它是一个接口

为什么??为什么迭代器不是一个抽象类? 接口被用来定义一个特定的特性——这就是为什么在很多接口上会出现“能干”的结尾。但事实证明,java持有不同的观点。请解释一下

注意:在我看来,列表、集合等也应该是抽象类——所以我的问题也是关于它们的…

迭代器的每个实现对于它所迭代的集合来说都是唯一的。这些代码不足以保证抽象基类

也就是说,接口的使用比抽象类的限制要小得多。请记住,在Java中,一个类只能扩展一个基类。所以,如果这些接口是抽象类,那么实现者将无法扩展任何其他类。使用接口可以给实现者完全的类层次结构自由

有一个接口和一个抽象类是很常见的。这种组合允许完全自由地实现接口,但在实现可以使用抽象类的情况下允许代码重用。

迭代器的每个实现对于它所迭代的集合是唯一的。这些代码不足以保证抽象基类

也就是说,接口的使用比抽象类的限制要小得多。请记住,在Java中,一个类只能扩展一个基类。所以,如果这些接口是抽象类,那么实现者将无法扩展任何其他类。使用接口可以给实现者完全的类层次结构自由


有一个接口和一个抽象类是很常见的。这种组合允许完全自由地实现接口,但在实现可以使用抽象类的情况下允许代码重用。

Java只允许对接口进行多重继承,包括抽象类在内的类只能使用单一继承。因此,当您将一个列表作为一个抽象类时,您将强制任何实现者遵循您的类设计,无论他的功能和业务需求是什么。另外,您不能在一个类中实现不同的行为。不可能实现堆栈行为加列表行为

由于部分实现通常很有用,您有时会在JDK中找到接口、抽象类和默认实现的三联图,例如TableModel、AbstractTableModel和DefaultTableModel。您可以选择要绑定到类层次结构的程度。当您已经有了强制您使用特定类的层次结构时,您仍然可以实现接口


Java在这方面相当静态。在这里,人们应该比在其他语言中更喜欢组合而不是继承。

Java只允许接口的多重继承,包括抽象类在内的类只能利用单一继承。因此,当您将一个列表作为一个抽象类时,您将强制任何实现者遵循您的类设计,无论他的功能和业务需求是什么。另外,您不能在一个类中实现不同的行为。不可能实现堆栈行为加列表行为

由于部分实现通常很有用,您有时会在JDK中找到接口、抽象类和默认实现的三联图,例如TableModel、AbstractTableModel和DefaultTableModel。您可以选择要绑定到类层次结构的程度。当您已经有了强制您使用特定类的层次结构时,您仍然可以实现接口


Java在这方面相当静态。与其他语言相比,这里应该更倾向于组合而不是继承。

将迭代器声明为接口的好处是为客户提供了一种简单的方法来遍历内部集合的每一项,而无需向客户提供有关具体实现的信息,即ArrayList、Vector、XML文件

因此,迭代器设计模式使具体的实现在不更改客户端代码的情况下可交换

此外,您可以编写自己的迭代器实现而不受任何限制,这是将迭代器声明为接口的最重要优势。例如,您可以编写一个迭代器,对特定的数据库表进行迭代,或对文本行进行迭代

Google为迭代器设计模式提供了更多的信息,以了解其优缺点及其用法

问候,,
Bob

将迭代器声明为Inte的好处 rface是为客户提供一种简单的方式,让他们浏览您内部集合的每一项,而无需向客户提供有关具体实现的信息,即ArrayList、Vector、XML File?、

因此,迭代器设计模式使具体的实现在不更改客户端代码的情况下可交换

此外,您可以编写自己的迭代器实现而不受任何限制,这是将迭代器声明为接口的最重要优势。例如,您可以编写一个迭代器,对特定的数据库表进行迭代,或对文本行进行迭代

Google为迭代器设计模式提供了更多的信息,以了解其优缺点及其用法

问候,,
Bob

为什么应该是抽象类?如果你想强制执行一个契约,那么一个接口就是Enough java.util.List,如果你想强制执行一个契约并共享行为,那么你可以使用一个抽象类java.util.AbstractLists。对于集合、列表和其他集合,它们可能有类似的用途,因此是一个接口,但它们的实现非常不同,只需考虑一个ARARYLIST和LIKEDLIST,如果它们从一个抽象的列表中被分类,他们就必须重写很多代码。为什么应该是抽象类?如果你想强制执行一个契约,那么一个接口就是Enough java.util.List,如果你想强制执行一个契约并共享行为,那么你可以使用一个抽象类java.util.AbstractLists。对于集合、列表和其他集合,它们可能有类似的用途,因此是一个接口,但它们的实现非常不同,只需考虑一个ARARYLIST和LIKEDLIST,如果它们从一个抽象列表中被分类,它们就必须重写很多代码。