实现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里搜一些关于转型方面的资料看看