为什么此代码(ImplementingClass
)无效?
阻止这种情况得到支持的问题是什么?子类(InterfaceD
)不应该能够接受超类(InterfaceC
),并使用相同的方法吗?当InterfaceD
类型的某些内容用作类型InterfaceC
时,所有输入都将得到妥善处理。但是InterfaceD
也可以处理其他方案(ClassA
的对象),而不仅仅是ClassB
)。
我知道我可以在ImplementingClass
上实现这两种方法并将调用传递给InterfaceD
方法,但为什么编译器会要求它?
public class ClassA
{
// ...
}
public class ClassB : ClassA
{
// ...
}
public interface InterfaceC
{
void MethodA(ClassB)
}
public interface InterfaceD : InterfaceC
{
void MethodA(ClassA);
}
public class ImplementingClass : InterfaceD {
void MethodA(ClassA)
{
// ...
}
// refuse to implement MethodA(ClassB) ...
}
编辑:一个更简单的示例可能是InterfaceD
不存在,我尝试使用InterfaceC
MethodA(ClassA)
答案 0 :(得分:2)
您必须实施MethodA(ClassB)
,因为InterfaceD
继承自InterfaceC
,因此InterfaceD
现在有MethodA(ClassB)
和MethodA(ClassA)
,就像您可以访问方法一样通过ClassA
的实例ClassB
。{/ p>
最好的方法是不从InterfaceD
派生InterfaceC
并让ImplementingClass
实现所需的接口。没有看到一个具体的例子很难评论,但它基本上归结为你的界面设计。