interface ITurtle
{
void Fight();
void EatPizza();
}
interface ILeonardo : ITurtle
{
void UseKatana();
}
interface IRaphael : ITurtle
{
void UseSai();
}
interface IDonatello : ITurtle
{
void UseBo();
}
interface IMichelangelo : ITurtle
{
void UseNunchuku();
}
如果我想创建一个可以完成所有 4 个任务的大乌龟怎么办?我想编码:
class GrandTurtle : IMichelangelo, IDonatello, IRaphael, ILeonardo
{
// Implementation not shown for brevity.
}
Fight()
这可能吗,因为现在看来我必须实施EatPizza()
4 次。但我认为这两个常见的功能会解决,只需要实现一次,对吧?
我可以在不继承的情况下创建 4 个中间接口ITurtle
,然后GrandTurtle
实现ITurtle
。这解决了接口继承问题,但现在它看起来在语义上是错误的,因为它ITurtle
看起来像第五个兄弟,但事实并非如此。另外,我希望能够创建特定于海龟的类,例如class BostonLeonardo : ILeonardo
.
我从很多地方读过,这似乎是一场无休止的争论——有人说“接口内的继承”完全可以,而那些说不是——要么我不明白他们的解释,要么他们只是说这是不好的做法,没有解释为什么。