Подтвердить что ты не робот

Интерфейсы и наследование абстрактного класса, реализация в расширенных классах

В каждом примере, который я видел, расширенные классы реализуют интерфейсы своих родителей. Для справки, следующий пример:

interface MyInterface{
    public function foo();
    public function bar();
}

abstract class MyAbstract implements MyInterface{
    public function foo(){ /* stuff */ }
    public function bar(){ /* stuff */ }
}

// what i usually see
class MyClass extends MyAbstract implements MyInterface{}

// what i'm curious about
class MyOtherClass extends MyAbstract{}

Не удается ли реализовать интерфейс в дочернем модуле, который реализуется родителем, считается плохой практикой или чем-то еще? Существуют ли какие-либо технические недостатки для отказа от реализации в ребенке?

4b9b3361

Ответ 1

Я бы подумал, что вы на правильном пути. Нет необходимости объявлять, что вы реализуете интерфейс, когда расширяете класс, который уже implements он. Для меня это просто еще один кусок кода для поддержки, если требуется изменение. Итак, да, вы правы!

Ответ 2

Не удается реализовать интерфейс в ребенке, который реализуется родитель, считается плохой практикой или что нибудь? Есть ли технические Недостатки в реализация в ребенке?

Я просто не могу ответить на ваш вопрос лучше, чем этот парень:

По своей природе, хотя иногда они могут выглядеть очень похожими, абстрактными классы и классы очень разные цели.

Интерфейс класса подразумевается как инструмент для "пользователя" этого класса. интерфейс является публичной презентацией для класс, и он должен рекламировать, чтобы любой, кто хочет его использовать, что методы и константы и доступны снаружи. Так, как следует из названия, он всегда сидит между пользователем и классом реализуя его.

С другой стороны, абстрактный класс является инструментом, направленным на "исполнитель" классов, которые расширьте его. Это инфраструктура которые могут налагать ограничения и рекомендации о том, что конкретно классы должны выглядеть. Из класса проектная перспектива, абстрактные классы более важны для архитектуры чем интерфейсы. В этом случае разработчик сидит между абстрактным класс и бетон, здание последний сверху первого.

Ссылка

Таким образом, вам решать, на основе того, кто будет использовать (создавать экземпляры) ваши классы, и кто будет писать их. Если вы единственный пользователь и писатель своих классов, то, может быть, просто, может быть, вам не нужны оба. Но, если вы хотите дать каждому урезанный чертеж для основных битов для авторов (ов) класса и пользователей класса, то вам следует рассмотреть возможность использования как абстрагирования, так и реализации.

Ответ 3

Не удается ли реализовать интерфейс в дочернем элементе, который реализуется родителем, считается плохой практикой или чем-то еще?

Ребенок всегда реализует интерфейс, он не может обходиться с этим.

Я не знаю, если это плохая практика или что-то в этом роде. Я бы сказал, что это языковая функция.

Существуют ли какие-либо технические недостатки для исключения реализации у ребенка?

Вы не можете проверить отражение абстрактного класса для интерфейса, например.

Тем не менее, абстрактный класс уже является интерфейсом, поэтому технически они сами по себе не нуждаются в интерфейсе, но вы можете сделать это, чтобы держать вещи в пределах наследования.