将实现的List的方法实现到ArrayList

时间:2012-03-06 15:34:39

标签: java

我知道如何处理我的编程代码,但我不知道为什么要这样做。

我的ArrayList类实现List< E>接口。这意味着我必须将List接口中的所有方法复制到我的ArrayList类。这是为了阻止我的ArrayList类的错误说:“ArrayList不是抽象的,不会覆盖抽象方法iterator(int)”错误。有人可以更详细地向我解释一下吗?

另外:当我在NetBeans中使用自动更正时,它表示每个方法之后的语句“抛出新的UnsupportedOperationException(”尚不支持。“);”。为什么呢?

这是我的代码:

public class ArrayList<E> implements List<E> {

    private E[] elementData;
    private int elementCount;
    private int capacityIncrement;
    private static final int INVALID_INDEX=-1;
    private static final int DEFAULT_CAPACITY = 100;

    public ArrayList() {

        capacityIncrement = 0;
        elementData = (E[]) new Object[DEFAULT_CAPACITY];
    }

    public ArrayList(int capacity) {

        this.capacityIncrement = 0;
        this.elementData = (E[]) new Object[capacity];
    }

    public ArrayList(int capacity, int increment) {

        this.capacityIncrement = increment;
        this.elementData = (E[]) new Object[capacity];
    }

    private static class ArrayListIterator<E> implements Iterator<E> {
        private ArrayListIterator(ArrayList c) {

            elementData = c;
        }

    public interface List<E> {

    public int size();

    public boolean isEmpty();

    public void clear();

    public boolean contains(E element);

    public void add(E element);

    public boolean remove(E element);

    public E elementAt(int index);

    public int indexOf(E element);

    public void insertElementAt(E element, int index);

    public void removeElementAt(int index);

    public void setElementAt(E element, int index);


    public void removeDuplicates();

    public void trimToSize();

    public Iterator<E> iterator();

    public Iterator<E> iterator(int index);

    public String toString();
}

4 个答案:

答案 0 :(得分:2)

由于实施接口,您必须实施它声明的所有方法(除非您的类为abstract)。看一下继承的Java tutorial trail

答案 1 :(得分:1)

您实现了接口List,因此您需要实现此接口中定义的所有方法。例外情况说您应该将方法iterator()添加到ArrayList

界面就像是你(你的班级)签名的合同。您必须完成合同中定义的所有内容,或者换句话说,您需要从接口实现每个(抽象)方法。

编辑:我清理了代码,现在只需 ,就要实现每个方法都有// TODO条评论。< / p>

public class ArrayList<E> implements List<E> {
    private Object[] elementData;

    private int elementCount;
    private int capacityIncrement;

    private static final int INVALID_INDEX = -1;
    private static final int DEFAULT_CAPACITY = 100;

    public ArrayList() {
        capacityIncrement = 0;
        elementData = new Object[DEFAULT_CAPACITY];
    }

    public ArrayList(int capacity) {
        this.capacityIncrement = 0;
        this.elementData = new Object[capacity];
    }

    public ArrayList(int capacity, int increment) {
        this.capacityIncrement = increment;
        this.elementData = new Object[capacity];
    }

    @Override
    public int size() {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public boolean isEmpty() {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public void clear() {
        // TODO Auto-generated method stub

    }

    @Override
    public boolean contains(E element) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public void add(E element) {
        // TODO Auto-generated method stub

    }

    @Override
    public boolean remove(E element) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public E elementAt(int index) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public int indexOf(E element) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public void insertElementAt(E element, int index) {
        // TODO Auto-generated method stub

    }

    @Override
    public void removeElementAt(int index) {
        // TODO Auto-generated method stub

    }

    @Override
    public void setElementAt(E element, int index) {
        // TODO Auto-generated method stub

    }

    @Override
    public void removeDuplicates() {
        // TODO Auto-generated method stub

    }

    @Override
    public void trimToSize() {
        // TODO Auto-generated method stub

    }

    @Override
    public Iterator<E> iterator() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public Iterator<E> iterator(int index) {
        // TODO Auto-generated method stub
        return null;
    }

    protected class ArrayListIterator<T> implements Iterator<T> {
        private ArrayList<T> list;

        private ArrayListIterator(ArrayList<T> list) {
            this.list = list;
        }

        @Override
        public boolean hasNext() {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public T next() {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public void remove() {
            // TODO Auto-generated method stub

        }
    }
}

interface List<T> {
    public int size();

    public boolean isEmpty();

    public void clear();

    public boolean contains(T element);

    public void add(T element);

    public boolean remove(T element);

    public T elementAt(int index);

    public int indexOf(T element);

    public void insertElementAt(T element, int index);

    public void removeElementAt(int index);

    public void setElementAt(T element, int index);

    public void removeDuplicates();

    public void trimToSize();

    public Iterator<T> iterator();

    public Iterator<T> iterator(int index);

    public String toString();
}

答案 2 :(得分:1)

接口是一种合同,声明某些功能将由实现它的任何类提供。这是通过指定每个方法签名(但通常没有方法体 - 因此没有实际的实现逻辑)来完成的。因此,如果您有一个实现该接口的类,则必须为每个方法提供实现,以便您的类履行该合同。

答案 3 :(得分:0)

由于您说您的类“实现了List”,因此它必须实现List接口中定义的所有方法。界面就像是您的类的抽象规范,指定您的类可以执行的操作(其方法),而不提供有关您的类包含的内容/它如何工作的详细信息