Static Binding and Dynamic Binding

后端 未结 6 1509
灰色年华
灰色年华 2020-11-27 13:46

I am really confused about dynamic binding and static binding. I have read that determining the type of an object at compile time is called static binding and determining it

6条回答
  •  感动是毒
    2020-11-27 14:19

    This really depends on overloading and overriding if you did something like this:

    public class Animal{}
    
    
    public class Dog extends Animal{}
    
    public class AnimalActivity{
    
        public void eat(Animal a){
            System.out.println("Animal is eating");
        }
    
        public void eat(Dog d){
            System.out.println("Dog is eating");
        }
    }
    

    then in the main class:

    public static void main(String args[])
    {
        Animal a=new Animal();
        Animal d=new Dog();
        AnimalActivity aa=new AnimalActivity();
        aa.eat(a);
        aa.eat(d);
    }
    

    the result in the two cases will be: Animal is eating

    but lets twist it some, lets have this:

    public class Animal{
        public void eat(){
            System.out.println("Animal is eating");
        }
    }
    

    then:

    public class Dog extends Animal{
        public void eat(){
            System.out.println("Dog is eating");
        }
    }
    

    then in the main class:

    public static void main(String args[]){
        Animal d=new Dog();
        Animal a=new Animal();
        a.eat();
        d.eat();
    }
    

    now the result should be:

    Animal is eating
    Dog is eating
    

    this is because overloading binds at compile time "static binding" while overriding binds at run time "dynamic binding"

提交回复
热议问题