Навіщо потрібні абстрактні класи (php)
Спасибі, начебто, дуже зрозуміле пояснення. Ще питання на трохи іншу тему, але схожу. Чи правильно я розумію, що Транспорт потрібно робити абстрактний класом (а не звичайним класом) через те, що у нього є метод Рух і треба, щоб всі дочірні класи використовувати цей метод? Тобто якби це був би звичайний клас, то в дочірніх класах треба було б писати $ this-> move (), а якщо це абстрактний клас, то метод Рух буде відразу використовуватися в дочірніх класах?
Анна Б. ви стукайте в методи спадкоємців не через абстрактний клас, а безпосередньо.
Ви в своєму додатку створюєте новий об'єкт і використовуєте його методи.
наприклад
$ Airplains = new Airplains; // Тут створюється об'єкт
$ Airpalins-> getEngine (); // Тут виходить властивість об'єкта, яке він успадкував від абстрактного класу, або якесь своє властивість. У моєму прикладі це двигун.
$ Airplains-> move (); // тут використання методу рух, яке було успадковано у абстрактного, але сама реалізація цієї функції в класі Літак.
Літак і Машина рухаються по різному і це "опис" пишеться в методі мув. ДЛЯ КОЖНОГО СВОЄ. Але назви методу у них однакові. Це дозволяє передавати різні об'єкти і не переживати за те, що вони всі будуть справно працювати, якщо ви передасте літак він летить, якщо машина то вона поїде. Кожен клас знає, що йому робити. Якщо ви не реалізуєте абстрактний метод в інших класах, класи будуть кидати помилку і вимагати від вас їх реалізації.
ваш код $ this-> move () // взяти поточний об'єкт і використовувати метод мув. Якщо такий метод є, а він у вас є. То все буде окей.
Якщо ви робите це не через абстрактний клас, а просто через клас. Це буде перевизначення методу. На практиці це виходить так: у вас є опис як рухається літак, а потім ви викликаєте машину і машина починає використовувати те ж саме, що і літак в результаті машина летить, а не їде.