覆盖(override)是在继承+多态的前提下的概念。Java中的静态方法不多态,所以不涉及覆盖,无论静态方法是在基类还是派生类上。
从结果看,JVM中有4条invoke-*指令:invokevirtual、invokeinterface、invokestatic、invokespecial,其中前两条指令有多态语义而后两条没有。
静态方法是用invokestatic来调用的,编译的时候就确定好具体用那个版本的方法了。private的成员方法是用invokespecial调用的,同样不多态。被调用的变量是接口的引用时,调用方法是用invokeinterface。其余的情况的成员方法用invokevirtual。
Java为什么静态方法不可以被覆盖
最新推荐文章于 2024-03-31 18:58:28 发布