2013-10-04 58 views
-1

我是Java新手。 我正在使用Eclipse IDE。我得到一個錯誤如果@override在那裏,而不是@override已被刪除。任何人都可以在這方面幫助我。謝謝JAVA - 覆蓋

類型HashDictionary的方法remove(K)必須重寫一個超類。這是我得到的錯誤。

public interface DictionaryInterface <K extends Comparable<K>, V> 
{ 
    public void insert(K key, V value); 
    public V getValue(K str); 
    public void remove(K key); 
    public K[] getKeys(); 
} 


public class HashDictionary <K extends Comparable<K>, V> implements DictionaryInterface <K,V>{ 
    Hashtable<K,V> h; 
    Class<K> KeyType; 
    HashDictionary(Class<K> KeyType) { 
     h=new Hashtable<K, V>(); 
     this.KeyType=KeyType; 
    } 
    public K[] getKeys() { 
     // TODO Auto-generated method stub 
     Set<K> s = h.keySet(); 
     K elements[]=(K[])Array.newInstance(KeyType, h.size()); 
     int i=0; 
     for(K e:s) 
     { 
      elements[i]=e; 
      i++; 
     } 
     return elements; 
} 

    @Override 
    public void remove(K key) { 
     h.remove(key); 
    } 
    @Override 
    public V getValue(K str) { 
     return h.get(str); 
    } 
    @Override 
    public void insert(K key, V value) { 
     h.put(key, value); 
    } 
} 
+0

什麼是確切的錯誤信息? – Raptor

+0

您認爲使用@Override註釋是什麼? – Thihara

+2

讓我們看看你的'DictionaryInterface' –

回答

3

的事情是,你的界面DictionaryInterface沒有一個方法remove中或用不同的簽名。

如果您刪除註釋@Override,那麼它將視爲本地方法。

顯示DictionaryInterface或者交叉檢查。

更新:

你可能在你的IDE一些錯字罷工。 ovverided所有方法,

public class HashDictionary <K extends Comparable<K>, V> implements DictionaryInterface <K,V>{ 
     Hashtable<K,V> h; 
     Class<K> KeyType; 
     HashDictionary(Class<K> KeyType) { 
      h=new Hashtable<K, V>(); 
      this.KeyType=KeyType; 
     } 

      @Override 
      public void remove(K key) { 
       // TODO Auto-generated method stub 
       h.remove(key); 
      } 

     @Override 
     public void insert(K key, V value) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public V getValue(K str) { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     public K[] getKeys() { 
      // TODO Auto-generated method stub 
      return null; 
     } 


    } 
+0

我也添加了字典接口... – user2454830

0

我想,如果你DictionaryInterface是一種哈希表或HashMap中後,其remove可以假設Object作爲參數,而不是K

0

您只能註釋界面中的方法。看起來你的DictionaryInterface還沒有一種方法public void remove(K key)

+0

也添加了字典接口。代碼 – user2454830

0

你發佈的代碼是完美的。它沒有錯。我在Ideone進行了測試。 在線沒有編譯錯誤。我添加了abstract以便能夠編譯而無需實現其他三種方法。

interface DictionaryInterface <K extends Comparable<K>, V> 
{ 
    public void insert(K key, V value); 
    public V getValue(K str); 
    public void remove(K key); 
    public K[] getKeys(); 
} 


abstract class HashDictionary <K extends Comparable<K>, V> implements DictionaryInterface <K,V>{ 
    Hashtable<K,V> h; 
    Class<K> KeyType; 
    HashDictionary(Class<K> KeyType) { 
     h=new Hashtable<K, V>(); 
     this.KeyType=KeyType; 
    } 



    @Override 
    public void remove(K key) { 
     // TODO Auto-generated method stub 
     h.remove(key); 
    } 
} 
+0

他沒有發佈抽象類。 –

+0

這不會改變任何東西。覆蓋註釋仍然存在。如果註解是無效的,它也不會編譯。 –

+0

即使我沒有抽象的嘗試,代碼也可以很好地工作。有一件事我擔心,當你引用你的方法remove時,它被適當地引用爲相同或散列表的remove方法被引用。請檢查。抽象只需要顯示所有的方法都沒有實現,所以編譯失敗只是因爲,但是當所有的方法都被覆蓋並且@Override被移除時它可以正常工作。注意:我也使用Eclispe作爲IDE – artapart