1

我有一个在很多情况下都很有用的 Vector3i 类,但我发现自己扩展了它以使用类型系统来防止错误。

例如,我可能有一个“以自我为中心”的vector3i,它是世界上一个物体的局部,还有一个世界坐标vector3i。

两者自然不兼容,没有转换,对彼此毫无意义。

使用True Hungarian Notation将是一个很好的情况,但我正在扩展该类并且不添加任何新功能。

考虑到 JVM/Hotspots 优化,我是否会招致性能损失?

4

1 回答 1

2

继承是一种强大的工具,但这种力量是有代价的。继承本身有很多陷阱和问题。特别是,它会破坏封装,如果不小心实现,可能会导致代码脆弱。

Java 中的继承机制已经持续发展了超过 15 年。您可以依靠它来快速高效。您的数据模型需要它时,没有与性能相关的重要原因来传递继承。

对于您的情况,通过组合而不是通过继承来表示您的功能可能更有意义(换句话说,不是让 ClassB 扩展 ClassA,而是让 ClassA 成为 ClassB 中的实例字段,然后将方法调用委托给封装的对象)。你至少应该考虑一下。与继承相比,组合产生的代码更健壮,更不脆弱。

于 2015-05-16T05:27:21.333 回答