Здравствуйте, Кодт, Вы писали:
К>Прагматический ответ:
К>Чтобы всю реализацию [класса-предка] не переписывать [в наследнике] с нуля ради какого-то тюнинга или расширения.
Не ну это я знаю.... это и есть на пальцах
Хочется большого и чистого, но не слона, а такое фундаментальное обьяснение чтобы уж совсем фундаментально. Получается что наследование нужно только лишь для переиспользования кода? И если бы можно было автоматически делегировать вызовы реализуемого интерфейса в агрегат, то наследование было бы не нужно?
К>А публичность — чтобы в наследнике не переписывать с нуля интерфейсы предка.
К>[c]
К>struct IX { ... };
К>struct IY { ... };
Сразу вспоминается старый прикол про то что наследование убивает инкапсуляцию. Вот интересно в строго типизированных языках вообще можно сделать приватное наследование (реализации) с сохранением публичного интерфейса? Нда, сказанул. Это вообще на что может быть похожим?