Java コンパイラーが (ほぼ) 常にコンパイル時に静的メソッドを解決するのは一般的な事実です。例えば:
public class Super {
static void someMethod() {
// Do something...
}
}
public class Derived extends Super {
// Some other methods, excluding someMethod
}
テストコード:
Derived derived = new Derived();
derived.someMethod();
これは Super.someMethod() を呼び出す必要がありますよね? そして、javacが生成するように、コンパイル時に解決する必要がありますが、生成されることがわかりinvokestatic Super.someMethod
ましたinvokestatic Derived.someMethod
。なぜそうしているのですか?そして、どういうわけかこの動作を変更する方法はありますか?
私が間違っている場合は、私を修正してください。