有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (2) 个答案

  1. # 1 楼答案

    不能重写静态方法

    要重写方法,必须首先继承该方法。如果该方法未被继承,则没有重写的机会。因此,您永远不能重写私有方法,因为它们不是继承的

  2. # 2 楼答案

    撇开术语不谈,Java中的静态方法确实有一种覆盖关系,二进制兼容性第13.4.12节暗示了这种关系。如果T扩展了S,S声明了m(),则T.m()可以引用T或S中的方法,这取决于T中是否声明了m();在不破坏任何调用T.m()的代码的情况下,可以从T中添加或删除m()。(这意味着JVM invokestatic指令在超类链上执行一种动态方法查找)

    然而,这只是麻烦。如果T.m()的含义在无声中发生变化,这是非常危险的,因为现在它指向一个不同的方法。(实例方法应该继承契约,所以这不是问题;静态方法中没有这种理解。)

    所以这个“特征”永远不应该被使用;语言本不应该让它从一开始

    良好实践:如果我们调用T.m(),那么m()必须在T中声明;如果不先移除所有的T.m(),就不能从T中移除它