私はより深いレバーでの動的/静的バインディングを理解しようとしています。多くの読書と検索の後、何かについて本当に混乱したと言えます。
Java はオーバーライドされたメソッドに動的バインディングを使用します。その理由は、コンパイラがメソッドがどのクラスに属しているかを認識していないからです。例えば :
public class Animal{
void eat(){
}
class Dog extends Animal{
@Override
void eat(){}
}
public static void main(String[] args[]){
Dog d = new Dog();
d.eat();
}
私の質問は、コードが Dog クラスの eat() メソッドを参照していることをコンパイラが認識しないのはなぜですか? オブジェクトは実行時に作成されますが、コードが Dog のメソッドを参照していることをコンパイラが理解できないのはなぜですか?それはコンパイラの設計の問題ですか、それとも何か不足していますか?