Моего языка C++, но я чувствую, что ответ должен быть общимИнкапсуляции против Наследования
я могу выбрать между два вариантом для моего класса, B:
1) имеет B наследоваться от А, и сделать некоторые из методы виртуального
2) Объявите экземпляр A в пределах B.
Этот вопрос о том, что является оптимальным с точки зрения времени выполнения, так как оба будут работать нормально.
Я думаю, что вариант 1 менее оптимален для экземпляров A и B, потому что во время выполнения имеется слой косвенности, поскольку правильная функция выбирается из таблицы V.
Это правильно?
, если у вас нет ОЧЕНЬ разумной причины, лучше беспокоиться о удобочитаемости и ремонтопригодности, чем беспокоиться о том, сколько раз вы разыскиваете указатель –
«Что оптимально» почти всегда сводится к проблемам, зависящим от компилятора и платформы. Используйте профилировщик, измерьте различия. – Almo
Joshua Block посвящает целый предмет в своей книге «Эффективная Java», 2-е изд. «Использовать состав над наследованием». Причины убедительны. Это предполагает, что вы одобряете подход 2. Причины одобрения подхода 1 были бы, если B действительно является A-и-A, был разработан и надлежащим образом документирован для наследования. В большинстве случаев различия в производительности, связанные только с наследованием по сравнению с составом (включая переадресацию метода), будут тривиальными ... что вы должны выбрать дизайн, который имеет наибольший смысл (как указано выше). – scottb