重写基础类方法的编译报错的如何理解?

wavelin
  • 1
新手上路,请多包涵

试下改LinkedList的sort(),这个方法是本来实现接口list而有的,但总是报错,请指点:

import java.util.*;
public class TestSort{

    
LinkedList mtn = new LinkedList();//产生一个链表

public static void main(String[] args){
        new TestSort().go();
}
    public void go(){
        //链表里添加些元素
        mtn.add("L1");
        mtn.add("E2");
        mtn.add("M3");
        mtn.add("C4");
        
        Compare_str nc = new Compare_str();//生成一个比较器
        
        /*想试的就是下面的方法:*/
        mtn.sort(nc);

    }        

}
/比较器的定义/
class Compare_str implements Comparator <String>{

        public int compare(String one ,String two) {
                    return one.compareTo(two);
                }

}
/就是这里想测试能否在基础类LinkedList里改写sort:/
class LinkedList implements List<String>{

public void sort(Compare_str testcomp){
    System.out.println("test system method!");
}
/*
*TestSort.java:30: 错误: LinkedList不是抽象的, 并且未覆盖List中的抽象方法subList(int,int)
*class LinkedList implements List<String>{
*^
*1 个错误
*/
public LinkedList subList(int from ,int to){};//第一次编译后报错,根据报错信息添加这条语句
/*
*TestSort.java:30: 错误: LinkedList不是抽象的, 并且未覆盖List中的抽象方法listIterator(int)
*class LinkedList implements List<String>{
*^
*1 个错误
*/
public Iterator<String> listIterator(int m){};//添加新语句后第二次编译仍然报错,则再根据此报错信息添加这条语句
/*
*TestSort.java:30: 错误: LinkedList不是抽象的, 并且未覆盖List中的抽象方法listIterator(int)
*class LinkedList implements List<String>{
*^
*TestSort.java:47: 错误: LinkedList中的listIterator(int)无法实现List中的listIterator(int)
*    public Iterator<String> listIterator(int m){};//添加新语句后第二次编译仍然报错,则再根据此报错信息添加这条语句
*                            ^
  *返回类型Iterator<String>与ListIterator<String>不兼容
  *其中, E是类型变量:
*E扩展已在接口 List中声明的Object
*2 个错误
*/

}

回复
阅读 1.8k
2 个回答

楼上说的对,你要是只想要修改sort()放法,就写个类继承LinkedList,再重写sort类就行了。

public class MyLinkedList<E> extends LinkedList<E> {

    @Override
    public void sort(Comparator<? super E> c) {
        // TODO Auto-generated method stub
        super.sort(c);
    }

}

你这个报错是因为你的实现(implements)了List接口,那你必须把List下的所有放法都实现。你的报错提示信息都写明了,没有覆盖listIterator方法。你看一下List接口的源码,里面还有十几个抽象方法要实现的

自定义一个类继承LinkedList,重写void sort(Comparator<? super E> c)即可

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏