我有一个接口,3个实现接口的类,其中一个类可能是抽象的。
iAnimal // Interface
Animal // Abstract Class (Implements iAnimal)
Fox // Class (Implements iAnimal)
Deer // Class (Implements iAnimal)
Animal animal; // declare an animal
Switch (type)
{
Case "Fox":
animal = new Fox();
break;
Case "Deer":
animal = new Deer();
break;
}
animal.eat();
我只想在动物身上调用eat函数,这是switch语句的结果。
然而我收到错误:
无法将type1类型隐式转换为type2。
上述逻辑有什么问题吗?
感谢。
答案 0 :(得分:5)
Fox
和Deer
应继承自Animal
抽象类,以使您的代码正常工作。
即:
public class Deer : Animal
{
//code
}
public class Fox : Animal
{
//code
}
答案 1 :(得分:2)
您可以执行以下操作之一:
IAnimal animal; // Notice that it's an IAnimal now
Switch (type)
{
Case "Fox":
animal = new Fox();
break;
Case "Deer":
animal = new Deer();
break;
}
animal.eat();
OR
从Deer
类创建Fox
和Animal
类(在这种情况下,您发布的代码将是相同的)
编辑:
这是根据您发布的代码
的类层次结构 IAnimal
|
-------------------
| | |
Animal Fox Deer
您可以将派生类型的对象强制转换为更通用的类型(父级),因此Animal
- > IAnimal
,Fox
- >允许IAnimal
等
但它不适用于像Fox
- >这样的东西。 Animal
,因为Animal
不是福克斯的父母