【发布时间】:2014-12-03 17:56:44
【问题描述】:
我目前正在尝试掌握继承和实现的窍门,但我无法理解为什么需要实现接口,以及为什么它们不仅仅是普通方法。 这是我目前正在编写的代码,它让我想到了这些问题,我正在尝试扩展 ArrayList 类,以便在输入时自动对元素进行排序。
import java.util.ArrayList;
import java.util.*;
import java.util.Comparator;
/**
* extending to ArrayList
*/
public abstract class SortedArrayList<E> extends ArrayList<E> implements Comparator<E>
{
/**
* Constructing the super
*/
public SortedArrayList()
{
super();
}
public void insertAndSort (E element){
if (isEmpty()){
add(element);
}
for ( int i = 0; i < size(); i++){
E otherElement = get(i);
if(compare(element, otherElement) > 0){
add(i+1, element);
}
if(compare(element, otherElement) < 0) {
add(i-1, element);
}
}
}
}
注意:我知道扩展 arrayList 是不好的做法,这只是我必须做的事情。我也不允许使用 sort()。
我想使用比较器对 ArrayList 进行排序,所以我需要实现它。但是,它不会让我在不使类抽象的情况下实现它。我这样做了,尽管这意味着我不再遇到编译器错误,但我并不完全理解创建抽象类意味着什么以及它将产生什么影响。我在做正确的事吗? 谢谢。
【问题讨论】:
-
当实现一个
interface时,你必须实现它的方法(或者使实现类abstract) -
您认为您目前在哪里实现了
compare方法?当您调用compare(element, otherElement)时,您期望执行什么?不清楚为什么你决定实施Comparator,要么...... -
对不起,我对此很陌生。我以为它在for循环中?我正在尝试遍历对象的数组列表并按升序对它们进行排序
-
没有。如果你有一个非抽象类,你就不能使用 compare() 方法。
标签: java inheritance abstract-class comparator