Это плохой ответ, но все равно идет.
Когда вы наследуете класс, Intellisense или Code Completion сообщат вам, к каким функциям и переменным (общедоступным и защищенным) вы можете обращаться или переопределять. Это частичный ответ на вопрос «как наследование предоставляет родительскую реализацию подклассам?» потому что вам нужно знать, к каким функциям и переменным вы можете обращаться или манипулировать.
Если вы не написали родительский класс, вам нужно будет обратиться к некоторой документации, которая скажет вам, какие функции вы можете переопределить и место этой функции (когда и откуда она вызывается) в реализации родительского класса. Эта информация позволяет узнать, как реализован родительский класс.
Если вы написали родительский класс самостоятельно, то вы уже знаете его поведение. Когда вы создаете свой дочерний класс, вы уже имеете в виду, как работает родительский класс, таким образом, вы знаете, какие переменные и функции следует использовать или переопределять.