日期:2014-05-20  浏览次数:20764 次

实现interface时返回类型错误?
有三个接口IAdresse,IBestellung,IKunde,   前两个都实现了,可是实现IKunde的时候实现Adresse   getAdresse()正确,但Collection <Bestellung>   getBestellungen()就提示于interface返回类型不匹配,难道用了Collection后继承就变化了?
public   interface   IAdresse   {
...
}
public   interface   IBestellung   {
...
}
public   interface   IKunde   {
public   abstract   IAdresse   getAdresse();
public   abstract   Collection <IBestellung>   getBestellungen();
}

public   class   Adresse   implements   IAdresse,Serializable{
...
}

public   class   Bestellung   implements   IBestellung,Serializable{
...
}

public   class   Kunde   implements   IKunde,Serializable   {  

  private   Adresse   adresse;
  private   Collection <Bestellung>   bestellungen;

  public   Adresse   getAdresse(){
    return   adresse;
  }   //   正确

  public   Collection <Bestellung>   getBestellungen(){
  return   bestellungen;
  }   //   出错:   the   return   type   is   incompatible   with   IKunde.getBestellungen()

}

请高手解答.


------解决方案--------------------
public interface IKunde {
public abstract IAdresse getAdresse();
public abstract Collection <IBestellung> getBestellungen();
}

public interface IKunde {
public IAdresse getAdresse();
public Collection <IBestellung> getBestellungen();
}

public class Kunde implements IKunde,Serializable {

private Adresse adresse;
private Collection <IBestellung> bestellungen;

public Adresse getAdresse(){
  return adresse;
}
public Collection <IBestellung> getBestellungen(){
  return bestellungen;
}
}

这样试试看。

------解决方案--------------------
正确答案如下:
在class Kunde 中,
你定义了private Collection <IBestellung> bestellungen
注意,这里是Collection <IBestellung>
但是,你返回的时候,你用了Collection <Bestellung>
这里IBestellung是Bestellung的父类,
由子类向父类转型是自动的
但是由父类向子类转型时,是要报错的
如有不明白的地方,楼主到google里搜一些关于转型方面的资料看看