【问题标题】:Collection Interface Java集合接口 Java
【发布时间】:2011-01-28 07:55:13
【问题描述】:
import java.util.*;

public class ArrayListDemo{
  public static void main(String[] args) {
    ArrayList<Object> arl=new ArrayList<Object>();
    Integer i1=new Integer(10);
    Integer i2=new Integer(20);
    Integer i3=new Integer(30);
    Integer i4=new Integer(40);

arl.add(i1);
arl.add(i2);
arl.add(s1);
System.out.println("The content of arraylist is: " + arl);
System.out.println("The size of an arraylist is: " + arl.size());

这是一个简单的arrayList 程序。 ArrayList 扩展了 AbstractList 并实现了 List、Cloneable、Serializable。

这里我的问题是:不是必须通过arrayList类(ArrayListDemo)实现上述接口(List,Cloneable,Serializable)中存在的所有方法。

【问题讨论】:

  • 在您的情况下,不需要在 ArrayListDemo 中实现任何内容,因为它根本不扩展或实现任何类或接口。但我可能把你的问题弄错了,请澄清一下。
  • 不是的,如果你重写一个抽象的子类或实现,你不需要重写所有,甚至任何方法。

标签: java


【解决方案1】:

除非你的类扩展了另一个已经提供这些方法的类,或者你的类是一个抽象类。例如:

interface Foo {
    void bar();
    void baz();
}

class Superclass {
    public void bar() {}
}

class Subclass extends Superclass implements Foo {
    // We need to implement baz, but bar is okay already
    @Override public void baz() {}
}

abstract class AbstractClass implements Foo {
    // No need to do anything... a subclass will need
    // to implement both bar and baz though
}

【讨论】:

    【解决方案2】:

    类似的东西

    class C implements Collection {...}
    

    你必须实现所有的方法,你试过了吗?你可以使用

    class C extends AbstractCollection {...}
    

    并实现很多方法。

    【讨论】:

      【解决方案3】:

      ArraylistDemo 不是扩展 arraylist,它只是使用一个。由于ArrayList 已经实现了这些接口,您不需要自己这样做。

      【讨论】:

      • 他没有这么说。他在说 "ArrayList extends AbstractList"
      • 确实如此,但这不是他实现的类(download.oracle.com/javase/1.4.2/docs/api/java/util/…)。最后一句话很难理解,但括号中的“arraylistdemo”这一事实我认为他想在那里实现它们。所以不需要在HIS类中实现这些功能,因为它们已经在arralyist中了。
      【解决方案4】:

      ArrayList 只需实现AbstractList 中尚不存在的方法。只要方法可用,它们是来自ArrayList 本身还是它的超类之一都没有关系。

      不过,我不清楚您所说的“通过 arrayList 类 (ArrayListDemo)”是什么意思。 ArrayListDemo 本身没有实现接口或扩展 ArrayList

      【讨论】:

        【解决方案5】:

        完全没有,因为 ArrayListDemo 没有扩展或实现任何类(当然是对象)。它只使用 ArrayList 作为局部变量类型。并且 ArrayList 已经完全实现了。

        【讨论】:

        • 他没有这么说。他在说 "ArrayList extends AbstractList"
        【解决方案6】:

        是的,除非您的实现只是部分的 (abstract class)。那么剩下的接口方法必须由扩展抽象类的(具体)类来实现。

        最后,所有接口方法需要一个实现,否则编译器报错。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-01-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-07
          • 1970-01-01
          • 2020-01-27
          • 1970-01-01
          相关资源
          最近更新 更多