我是java的初学者并试图理解动态绑定
当我遇到下面的例子时,
class Animal{}
class Dog extends Animal{
public static void main(String args[]){
Dog d1=new Dog();
}
}
这里d1是Dog类的一个实例,但它也是一个实例 动物
这里我不明白的是,当你在java中继承时,d1如何也成为Animal类的一个实例。
有人可以解释这个概念。
答案 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
}
}