Важное еще понимать, что это только общепринятый вариант ООП (Java/C#/Python), но он не единственный. Например, в JS изначально не было классов, но наследование всё равно было — от других объектов. В каких-то языках может быть асинхронная передача сообщений вместо синхронных вызовов методов, наследование может быть множественным (как в Си++), в языке могут отсутствовать интерфейсы, присутствовать какие-нибудь
примеси,
типажи,
роли и так далее.