【发布时间】:2015-07-25 12:21:39
【问题描述】:
我在拉撒路写了一个小蛇游戏,我写的时候拉撒路抱怨
type
ISegment = interface(IRenderable, IMover)
end;
当我试图实现的时候是让 ISegment 成为一个 combined 接口,但它似乎不起作用。 Lazarus 不支持多接口继承吗?
【问题讨论】:
标签: interface multiple-inheritance pascal lazarus
我在拉撒路写了一个小蛇游戏,我写的时候拉撒路抱怨
type
ISegment = interface(IRenderable, IMover)
end;
当我试图实现的时候是让 ISegment 成为一个 combined 接口,但它似乎不起作用。 Lazarus 不支持多接口继承吗?
【问题讨论】:
标签: interface multiple-inheritance pascal lazarus
该语言不支持多重继承。一个类不能派生自多个基类。一个接口不能派生自多个基本接口。
但是,您可以做的是拥有一个实现多个接口的类。像这样:
type
TMyClass = class(TInterfacedObject, IFoo, IBar)
....
end;
【讨论】:
确实如此,您只需要更好的阅读技巧来理解this(查看语法图,在遗产部分)。 class type identifier 没有声明为可选,但 implemented interface 可以。大致读作:
"一个类可以扩展一个基类,实现尽可能多的接口。当一个接口即将实现时,基类也必须指定。反之则不适用,你可以完美拥有一个类扩展基类而不指定任何接口"
【讨论】:
ISegment 的接口,并且我想强制实现它的任何类也实现IMover 和IRenderable。
答案是否定的,Pascal 不应该支持多重继承,所以我不明白为什么它应该为接口做不同的事情
如上一个答案所述,您仍然可以在一个类中实现多个接口
【讨论】: