Есть ли снижение производительности в Java для расширения классов по причине "нет"?
У меня есть класс Vector3i, который полезен во многих ситуациях, но я обнаружил, что расширяю его, чтобы использовать систему типов для предотвращения ошибок.
Например, у меня может быть "эгоцентричный" вектор 3i, который является локальным для объекта в мире, и всемирная координата вектор 3i.
Они, естественно, несовместимы без преобразования и не имеют смысла друг для друга.
Было бы неплохо использовать True Hungarian Notation, но вместо этого я расширяю класс и не добавляю новых функций.
Несу ли я потерю производительности из-за оптимизации JVM/Hotspots?
1 ответ
Наследование является мощным инструментом, но власть имеет свою цену. Наследование имеет много своих подводных камней и проблем. В частности, он нарушает инкапсуляцию и может привести к хрупкому коду, если он не реализован с осторожностью.
Механизм наследования в Java непрерывно разрабатывался более 15 лет. Вы можете положиться на это, чтобы быть быстрым и эффективным. Нет существенных причин, связанных с производительностью, для передачи наследования, когда ваша модель данных требует его.
Для вашего случая может иметь смысл представлять ваши функциональные возможности по составу, а не по наследованию (другими словами, вместо того, чтобы ClassB расширял ClassA, сделайте ClassA полем экземпляра в ClassB, а затем делегируйте вызовы метода инкапсулированному объекту). Вы должны по крайней мере рассмотреть это. По сравнению с наследованием состав приводит к тому, что код становится более надежным и менее хрупким.