相关疑难解决方法(0)

为什么Java中的许多Collection类扩展了抽象类并实现了接口?

为什么Java中的许多Collection类扩展了Abstract类并实现了接口(也是由给定的抽象类实现的)?

例如,类HashSet扩展AbstractSet并实现Set,但AbstractSet已经实现Set.

java collections

42
推荐指数
4
解决办法
4817
查看次数

为什么arraylist类实现List以及扩展AbstractList?

实现以及扩展的java.util.ArrayList实现.但是在java文档中你可以看到AbstractList已经实现了List.那么实现List以及扩展AbstractList不是多余的吗? 我的第二个问题 请看下面的代码:ListAbstractList



String str = "1,2,3,4,5,6,7,8,9,10";
String[] stra = str.split(",");
List<String> a = Arrays.asList(stra);
Run Code Online (Sandbox Code Playgroud)

Arrays.asList()Arrays类的方法包含自己的ArrayList实现.但是这个只扩展了AbstractList,但没有实现List.但上面的代码编译.
但是当代码被修改为以下内容时

String str = "1,2,3,4,5,6,7,8,9,10";
String[] stra = str.split(",");
java.util.ArrayList<String> a = Arrays.asList(stra);
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:cannot convert form List<String> to ArrayList<String>
这背后的原因是什么?
EDIT
Arrays.asList()确实返回自己的ArrayList实现.看看这个.

java arrays arraylist

26
推荐指数
2
解决办法
2万
查看次数

ArrayList.java中List接口的冗余实现

可能重复:
为什么ArrayList有"实现列表"?

我是java新手我试图看到集合界面的层次结构.我发现AbstractList.java的签名 就像

public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E>
Run Code Online (Sandbox Code Playgroud)

它实现了List接口.但是,如果你看看子类ArrayList.java的签名,它看起来像

public class ArrayList<E> extends AbstractList<E>   implements List<E>, RandomAccess, Cloneable, java.io.Serializable
Run Code Online (Sandbox Code Playgroud)

如果你看父类已经实现了List接口那么为什么子类再次实现相同的接口(List).

这背后是否有具体的原因或要求

java collections

13
推荐指数
1
解决办法
607
查看次数

为什么在已经在父母身上实现接口时实现接口?

我在很多地方甚至在Java核心本身看到,尽管在父类中实现了一个接口,但子类明确地实现了相同的接口.

作为一个例子,这是一个AbstractSet实现Set 的定义

public abstract class AbstractSet<E> extends AbstractCollection<E> implements Set<E> 
Run Code Online (Sandbox Code Playgroud)

和HashSet扩展AbstractSet.

public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable
Run Code Online (Sandbox Code Playgroud)

我们为什么要再次明确实施Set?再次LinkedHashSet延伸相同的模式HashSet.

public class LinkedHashSet<E> extends HashSet<E> implements Set<E>, Cloneable, java.io.Serializable 
Run Code Online (Sandbox Code Playgroud)

LinkedHashSet延伸Hashset,

HashSet农具Set<E>,Cloneable,java.io.Serializable

LinkedHashSet隐式实现所有接口,其父级扩展.那么为什么呢?我试图搞清楚,但我找不到背后的原因.即使是为了可读性,为什么不明确地实现Collection?

如果删除这个不必要的implements关键字,它的可读性更强 有谁知道这背后的原因?

我在SOF上看到了一些关于这个的问题,但我不相信这是为了更好的可读性,如果这也是为什么不实现Collection接口呢?

java oop collections jvm interface

5
推荐指数
0
解决办法
58
查看次数

当'B'延伸'A'时,为什么要实现接口'A'和'B'

假设我有以下代码......

interface A{
  void a();
}

interface B extends A{
  void b();
}

class ImplementOne implements B{ 
  public void a(){};
  public void b(){};
}     

class ImplementTwo implements B, A{ 
  public void a(){};
  public void b(){};
} 
Run Code Online (Sandbox Code Playgroud)

无论类ImplementTwo是实现B和A,还是只实现B,它仍然需要在接口A中实现方法a(),因为接口B扩展了接口A.是否有任何理由明确地做

...implements B, A
Run Code Online (Sandbox Code Playgroud)

而不仅仅是

...implements B  
Run Code Online (Sandbox Code Playgroud)

java interface class

4
推荐指数
1
解决办法
703
查看次数

实现接口并扩展实现相同接口的类?

可以实现接口并扩展实现相同接口的类会导致任何问题吗?(混淆除外)

例如:

interface IDo
public abstract class DoIt implements IDo
public class IllDo extends DoIt implements IDo
Run Code Online (Sandbox Code Playgroud)

(请忽略它似乎错了)

java interface

2
推荐指数
1
解决办法
1296
查看次数

java中的抽象列表和列表

我知道在 Java 中大多数人使用以下方式声明列表:

List l = new ArrayList();
Run Code Online (Sandbox Code Playgroud)

但这和之间有什么区别

AbstractList l = new ArrayList();
Run Code Online (Sandbox Code Playgroud)

在这个特定实例中,使用接口相对于抽象类有哪些优点?

java list abstract

1
推荐指数
1
解决办法
3891
查看次数

标签 统计

java ×7

collections ×3

interface ×3

abstract ×1

arraylist ×1

arrays ×1

class ×1

jvm ×1

list ×1

oop ×1