Вы неправильно понимаете, что означает финал.
Один из основополагающих принципов ООП заключается в том, что если класс является подклассом другого класса, то этот класс получает все функциональные возможности класса, от которого он наследует.Вы не можете унаследовать только некоторые функции суперкласса, это все или ничего.
Причина этого немного сложна для понимания, но как только вы это сделаете, вы поймете, что это имеет смысл.А именно, если кусок кода способен обрабатывать элементы определенного класса, то он также должен иметь возможность обрабатывать любой подкласс элемента.Если подкласс не обладает всей функциональностью своего суперкласса, вы не сможете этого сделать.
Например, представьте, что у вас есть класс, который определяет взаимодействие с платежным шлюзом.Поскольку все платежные шлюзы различны, вы не можете (или, по крайней мере, не должны) реализовать один класс, который может взаимодействовать с любым из доступных платежных шлюзов.Но в целом платежные шлюзы работают в основном так же.Запрос отправлен, включая данные кредитной карты пользователя и сумму, которую вы хотите снять с карты.Платежный шлюз отвечает сообщением о том, был ли платеж авторизован или нет.
Вы реализуете такую функциональность с помощью абстрактного суперкласса, который определяет, как вы взаимодействуете с платежными шлюзами в целом, а затем создаете подкласс для каждого платежного шлюза, который вы хотите использовать (paypal, sagepay, что угодно).
Поскольку все эти подклассы наследуются от одного и того же базового класса, вы можете быть уверены, что все они реализуют определенные методы, и вы можете отправлять сообщения этим методам без беспокойства.Пока класс оплаты, с которым вы имеете дело, является подклассом вашего абстрактного класса оплаты, тогда все должно работать.
Если один из подклассов не смог реализовать что-либо из абстрактного суперкласса, то вы не могли быть уверены, что отправка определенного сообщения подклассу сработает или выдает исключение.Это сделало бы наследство довольно бессмысленным.
Окончательный вариант в PHP (и, действительно, большинство языков ООП, которые реализуют его или подобные концепции) означает: «Это конечная реализация этого метода. Если программист подклассирует меня, то он не может заменить мои окончательные методы своимисобственная реализация ».Это не значит, что методы не будут доступны в подклассе, просто вы не можете их изменить.
Если вам действительно нужно удалить функциональность из подкласса, вы можете сделать это, переопределив метод суперкласса и заменив его пустым методом (который ничего не делает).Но не делайте этого, так как это вызовет проблемы типа, описанного выше.
Как правило, если вы сталкиваетесь с ситуациями, когда у вас есть функциональные возможности в суперклассе, которые вам не нужны в подклассе, это запах кода, который говорит вам, что вам может понадобиться переосмыслить свой дизайн.