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

Когда внедрять и расширять?

  • Когда следует использовать implement или extend?
  • Каковы некоторые реальные примеры?

Правильно ли это?

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

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

Расширение классов заставляет расширенный (дочерний?) класс наследовать все от своего родительского класса, кроме методов и переменных, объявленных как private?

Ожидаемый сценарий реальной жизни: у меня есть один класс под названием sessions с двумя дочерними классами с именем sessioncookies и databasesessions. sessioncookies и databasesessions вместе наследуют ряд взаимных опций конфигурации из своих родительских сеансов, что упрощает изменение конфигурации, чтобы повлиять на всевозможные возможные хранилища данных для посетителей.

4b9b3361

Ответ 1

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

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

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

Наследование - это большая концепция в ООП, которая выходит далеко за рамки простого PHP. Я рекомендую вам прочитать статью в Википедии о наследовании и, возможно, " Разработка шаблонов от банды четырех".

Я считаю, что ваше понимание наследования в основном правильно. Следующим шагом будет использование его в производстве.

Ответ 2

Реализация:

Интерфейсы являются абстрактными классами, поэтому вы можете только объявлять вещи. Класс реализует интерфейс. Вы можете реализовать несколько интерфейсов.

Расширение:

Вы расширяете классы, когда вам нужна более конкретная версия класса.

Пример:

// Contract: a pet should play
public interface Pet {
    public void play(); 
}

// An animal eats and sleeps
class Animal {
    public void eat();
    public void sleep();
}


public class Dog extends Animal implements Pet {

    public void play() {...}
}


public class Camel extends Animal {
}

Верблюд и собака - животные, поэтому они расширяют класс Animal. Но только собака может быть домашним животным!