我知道如何处理我的编程代码,但我不知道为什么要这样做。
我的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();
}
答案 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接口中定义的所有方法。界面就像是您的类的抽象规范,指定您的类可以执行的操作(其方法),而不提供有关您的类包含的内容/它如何工作的详细信息