Нека имаме абсклас, който го наследяват други абскласове и т.н… демек, преставяме си една дървовидна структура от само абскласове.
Идеята ми е, ако абсклас наследява абсклас, трябва ли да му имплементира абсметодите, или това е задължително само за обикновените класове, които наследяват абскласа?
Отговор: НЕ
Може и да ги оставиш за последния – обикновения. Демек, да ги натрупаш за накрая и там да ги имплементираш.
Може и да ги имплементираш в наследника – абстрактния, а ако искаш евентуално – в обикновения да го оверрайднеш.
В наследяващият абстрактен клас, който наследява абстрактният си родител, можеш да имаш същият абстрактен метод, демек:
abstract class Klass
{
abstract public function ala();
}
abstract class SubKlass extends Klass
{
abstract public function ala();
}
Но в нормалният клас вече трябва да имаш имплементиран ala().
Абстрактните класове са „призраци“, те просто задължават обикновеният клас да ги имплементира. Иначе можеш да си ги оверрайдваш както си щеш.