【发布时间】:2020-08-23 15:05:47
【问题描述】:
在:
// services
public interface Mother { public Collection<? extends Father> getMamaStuff() {}}
public interface Daughter extends Mother {}
// data
public interface Father { public String getPapaStuff() }
public interface Son extends Father { public String playLoudMusic() }
为什么不允许这样做:
public class Clazz {
Clazz(Daughter daughter) {//boilerplate}
public Collection<Son> idk = doughter.getMamaStuff();
}
- 是不是因为没有办法知道Father的哪个实现 克拉兹会得到吗?
- 解决此问题的好方法是什么?
- 在这种情况下 instanceof 是好的做法吗?
在我看来,类型检查是没有办法的。
【问题讨论】:
-
没有“女儿”这样的东西,你希望它如何工作?母亲包含一系列被称为“mamaStuff”的父亲?女儿延长妈妈????你对世界的看法似乎很奇怪。它不起作用的原因是因为它在您在构造函数中设置女儿的值之前被调用。
-
仅供参考:你怎么知道
Daughter是否应该扩展Mother而不是相反? -
修复拼写错误后,我的IDE,也就是Eclipse,显示如下编译错误:
Type mismatch: cannot convert from Collection<capture#1-of ? extends Father> to Collection<Son>你也一样吗? -
是的,有人会在 Class 中传递一些东西,这是其中一些接口的实际实现。我知道继承链是正确的,因为这是我所处的情况,我也在扩展框架功能,为了解决一些构造函数的抱怨,Clazz 的实例化方式并不重要,因为这不会影响手头的问题.
标签: java inheritance interface multiple-inheritance