动态绑定如何在java中工作

时间:2017-05-03 05:16:22

标签: oop

我是java的初学者并试图理解动态绑定

当我遇到下面的例子时,

class Animal{}  

class Dog extends Animal{  
 public static void main(String args[]){  
  Dog d1=new Dog();  
 }  
}
  

这里d1是Dog类的一个实例,但它也是一个实例   动物

这里我不明白的是,当你在java中继承时,d1如何也成为Animal类的一个实例。

有人可以解释这个概念。

2 个答案:

答案 0 :(得分:1)

为什么他们说" d1也是Animal"的实例,他们的真正含义是d1可以像Animal的实例一样使用。您可以使用d1执行Animal的实例可以执行的所有操作,包括但不限于:

  • d1传递给Animal参数

    public static void method(Animal a) { ... }
    ...
    method(d1); // compiles!
    
  • d1分配给Animal

    类型的变量
    Animal myAnimal = d1;
    
  • 调用Animal

    中的方法
    d1.move();
    

您可以执行所有这些操作的原因全是因为extends关键字。

答案 1 :(得分:0)

动态绑定在运行时发生。它也称为延迟绑定,因为它发生在运行时。在编译期间无法确定对象的类型。父类和子类具有相同的方法但该方法被覆盖。 理解动态绑定的简单示例

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

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

class Test{
public static void main(String [] args){
Animal obj = new Animal();
obj.eat(); // displays Animal is Eating
Animal obj1 = new Dog(); // reference of the parent class
obj1.eat(); // displays Dog is Eating

}
}