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

发布于 2022-09-06 23:11:36 字数 1850 浏览 19 评论 0

试下改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 个错误
*/

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

皓月长歌 2022-09-13 23:11:36

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

韬韬不绝 2022-09-13 23:11:36

楼上说的对,你要是只想要修改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接口的源码,里面还有十几个抽象方法要实现的

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文