2015-07-25 1 views
0

пишу небольшую Snake игру в Лазаре и Лазарь жалуется, когда я пишуНаследование нескольких интерфейсов не поддерживается Lazarus?

type 
    ISegment = interface(IRenderable, IMover) 
    end; 

Когда я пытаюсь добиться, чтобы сделать ISegment интерфейс в сочетании, но это не похоже на работу. Lazarus не поддерживает множественное наследование интерфейса?

ответ

0

Он просто нуждается в лучшем навыке чтения, чтобы понять this (посмотрите на диаграмму синтаксиса в части наследия). class type identifier не указано как факультативный, но implemented interface. Он примерно читается как:

«Класс может расширить базовый класс и реализовать как можно больше интерфейсов. Когда интерфейс будет реализован, базовый класс также должен быть указан. Другой способ не применяется, вы можете совершенно иметь класс расширяет базовый класс без указания интерфейса»

+1

Я не уверен, как это отвечает на мой вопрос. Я хочу создать интерфейс под названием «ISegment», и я хочу, чтобы любой класс, который его реализует, также реализует «IMover» и «IRenderable». – Undreren

+0

Я не пытаюсь создать _class_, который реализует несколько интерфейсов, я пытаюсь сделать _interface_, это расширение нескольких _others_. – Undreren

+0

ах, я вижу. в этом случае используйте тот же метод выше на странице http://www.freepascal.org/docs-html/ref/refse39.html. ну, по-видимому, синтаксическая диаграмма не позволяет ее по какой-либо причине. – LeleDumbo

-1

ответ: нет, Паскаль не должен поддерживать множественное наследование, так что я не понимаю, почему он должен делать разные вещи для интерфейсов, то

Как пояснялось в предыдущем ответе, вы все еще можете реализовать несколько интерфейсов в классе

+0

Интерфейсы - это форма множественного наследования. –

+1

Извините, Марко, но вопрос в том, могут ли интерфейсы наследовать несколько интерфейсов одновременно, а ответ - нет, потому что Pascal не поддерживает множественное наследование вообще. Вы не можете сказать, что «интерфейсы являются формой множественного наследования», потому что это не множественное наследование, даже если вы можете достичь чего-то подобного. Если бы это была «форма множественного наследования», мне не нужно было бы выполнять каждую функцию, которая исходит от интерфейсов каждый раз, когда я должен использовать, нет никакого кода, повторно используемого вообще (между прочим). Мой ответ верен, но ваш комментарий не совсем прав. – Jade

+0

Кроме того, могу ли я спросить вас, как использовать интерфейсы для достижения наследования сразу нескольких интерфейсов? – Jade

2

В языке не поддерживается множественное наследование. Класс не может быть получен из нескольких базовых классов. Интерфейс не может быть получен из нескольких базовых интерфейсов.

Однако вы можете иметь класс, который реализует несколько интерфейсов. Например:

type 
    TMyClass = class(TInterfacedObject, IFoo, IBar) 
    .... 
    end;