2013-10-04 47 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