鍍金池/ 問答/Java  網(wǎng)絡(luò)安全/ 重寫基礎(chǔ)類方法的編譯報(bào)錯(cuò)的如何理解?

重寫基礎(chǔ)類方法的編譯報(bào)錯(cuò)的如何理解?

試下改LinkedList的sort(),這個(gè)方法是本來實(shí)現(xiàn)接口list而有的,但總是報(bào)錯(cuò),請指點(diǎn):

import java.util.*;
public class TestSort{

    
LinkedList mtn = new LinkedList();//產(chǎn)生一個(gè)鏈表

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();//生成一個(gè)比較器
        
        /*想試的就是下面的方法:*/
        mtn.sort(nc);

    }        

}
/比較器的定義/
class Compare_str implements Comparator <String>{

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

}
/就是這里想測試能否在基礎(chǔ)類LinkedList里改寫sort:/
class LinkedList implements List<String>{

public void sort(Compare_str testcomp){
    System.out.println("test system method!");
}
/*
*TestSort.java:30: 錯(cuò)誤: LinkedList不是抽象的, 并且未覆蓋List中的抽象方法subList(int,int)
*class LinkedList implements List<String>{
*^
*1 個(gè)錯(cuò)誤
*/
public LinkedList subList(int from ,int to){};//第一次編譯后報(bào)錯(cuò),根據(jù)報(bào)錯(cuò)信息添加這條語句
/*
*TestSort.java:30: 錯(cuò)誤: LinkedList不是抽象的, 并且未覆蓋List中的抽象方法listIterator(int)
*class LinkedList implements List<String>{
*^
*1 個(gè)錯(cuò)誤
*/
public Iterator<String> listIterator(int m){};//添加新語句后第二次編譯仍然報(bào)錯(cuò),則再根據(jù)此報(bào)錯(cuò)信息添加這條語句
/*
*TestSort.java:30: 錯(cuò)誤: LinkedList不是抽象的, 并且未覆蓋List中的抽象方法listIterator(int)
*class LinkedList implements List<String>{
*^
*TestSort.java:47: 錯(cuò)誤: LinkedList中的listIterator(int)無法實(shí)現(xiàn)List中的listIterator(int)
*    public Iterator<String> listIterator(int m){};//添加新語句后第二次編譯仍然報(bào)錯(cuò),則再根據(jù)此報(bào)錯(cuò)信息添加這條語句
*                            ^
  *返回類型Iterator<String>與ListIterator<String>不兼容
  *其中, E是類型變量:
*E擴(kuò)展已在接口 List中聲明的Object
*2 個(gè)錯(cuò)誤
*/

}

回答
編輯回答
幼梔

樓上說的對,你要是只想要修改sort()放法,就寫個(gè)類繼承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);
    }

}

你這個(gè)報(bào)錯(cuò)是因?yàn)槟愕膶?shí)現(xiàn)(implements)了List接口,那你必須把List下的所有放法都實(shí)現(xiàn)。你的報(bào)錯(cuò)提示信息都寫明了,沒有覆蓋listIterator方法。你看一下List接口的源碼,里面還有十幾個(gè)抽象方法要實(shí)現(xiàn)的

2018年5月9日 10:05
編輯回答
卟乖

自定義一個(gè)類繼承LinkedList,重寫void sort(Comparator<? super E> c)即可

2017年1月8日 12:58