私は複数の場所で最終的なメソッドが早期にバインドされていることを読みましたが、満足のいく理由を提供するものはありません。親クラス参照で呼び出されるfinalメソッドでも、どうしてそんなにcozになるのか疑問です。コンパイラーは、親のnonfinalメソッドと子のfinalメソッドのどちらが呼び出されるかを判断できません。
ご意見をお聞かせください。
class Parent {
void meth() {
System.out.println("parent");
}
}
class Child extends Parent {
@Override
final void meth() {
// TODO Auto-generated method stub
System.out.println("child");
}
public static void main(String[] args) {
Parent parent = new Parent();
Parent child = new Child();
child.meth();
parent.meth();
}
}
上記のコードでは、child(親参照)で呼び出されるメソッドmeth()が最後のメソッドですが、JVMは、呼び出される子または親メソッドと同様に、実行時にメソッドルックアップテーブルを使用する必要があります。