Есть ли снижение производительности в Java для расширения классов по причине "нет"?

У меня есть класс Vector3i, который полезен во многих ситуациях, но я обнаружил, что расширяю его, чтобы использовать систему типов для предотвращения ошибок.

Например, у меня может быть "эгоцентричный" вектор 3i, который является локальным для объекта в мире, и всемирная координата вектор 3i.

Они, естественно, несовместимы без преобразования и не имеют смысла друг для друга.

Было бы неплохо использовать True Hungarian Notation, но вместо этого я расширяю класс и не добавляю новых функций.

Несу ли я потерю производительности из-за оптимизации JVM/Hotspots?

1 ответ

Решение

Наследование является мощным инструментом, но власть имеет свою цену. Наследование имеет много своих подводных камней и проблем. В частности, он нарушает инкапсуляцию и может привести к хрупкому коду, если он не реализован с осторожностью.

Механизм наследования в Java непрерывно разрабатывался более 15 лет. Вы можете положиться на это, чтобы быть быстрым и эффективным. Нет существенных причин, связанных с производительностью, для передачи наследования, когда ваша модель данных требует его.

Для вашего случая может иметь смысл представлять ваши функциональные возможности по составу, а не по наследованию (другими словами, вместо того, чтобы ClassB расширял ClassA, сделайте ClassA полем экземпляра в ClassB, а затем делегируйте вызовы метода инкапсулированному объекту). Вы должны по крайней мере рассмотреть это. По сравнению с наследованием состав приводит к тому, что код становится более надежным и менее хрупким.

Другие вопросы по тегам