重写基础类方法的编译报错的如何理解?
试下改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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
自定义一个类继承LinkedList,重写void sort(Comparator<? super E> c)即可
楼上说的对,你要是只想要修改sort()放法,就写个类继承LinkedList,再重写sort类就行了。
你这个报错是因为你的实现(implements)了List接口,那你必须把List下的所有放法都实现。你的报错提示信息都写明了,没有覆盖listIterator方法。你看一下List接口的源码,里面还有十几个抽象方法要实现的