Java中的非虚方法

Nix*_*Dev 8 java virtual-functions

刚开始使用Java.我发现.NET有许多相似之处,但我发现Java中的所有方法都是虚拟的.所以问题是如何才能使它们成为非虚拟的呢?是final关键字之一,正确的解决方案?

Mau*_*rry 8

是的,还是私人的

  • 但是`private` - 就像在.net中一样 - 使得该方法不能被其他类调用,以及防止覆盖. (5认同)
  • 但是当我需要在子类中使用与父类中相同名称的方法时,我该怎么办.在C#中,有一个新的关键字用于这种情况......在Java中有类似的东西. (2认同)
  • 这不是真的——Java 中的“final”可以防止重写,它不会使重写成为非虚拟的。 (2认同)

Ric*_*son 6

如果您的目标是使该方法非虚拟性能,请让JIT处理该问题,直到您有证据表明它没有执行.

如果使方法非虚拟的原因是能够在子类中定义它但不涉及多态,那么你可能没有真正的原因进行子类化(如果你想对此进行比较,可以发布更多代码).

如果是设计,我建议尽可能使课程最终而不是单独的方法.IDEA对班级设计进行了很好的检查.尽量不要过于密切地倾听那些希望你把所有东西都打开的人,以便他们可以继承黑客攻击错误或限制; 当你不小心打破他们的子类时,他们会更大声地对你大喊大叫.

为客户提供一种方法来添加自己的类型而不是子类,他们甚至可能不会注意到你的类是最终的.