我对动态绑定和静态绑定感到非常困惑。我已经读过,在编译时确定对象的类型称为静态绑定,而在运行时确定它的称为动态绑定。
下面的代码会发生什么:
静态绑定还是动态绑定?
这表明什么样的多态性?
class Animal
{
void eat()
{
System.out.println("Animal is eating");
}
}
class Dog extends Animal
{
void eat()
{
System.out.println("Dog is eating");
}
}
public static void main(String args[])
{
Animal a=new Animal();
a.eat();
}
您的示例是动态绑定,因为在运行时确定类型a
是什么,并调用适当的方法。
现在假设您也具有以下两种方法:
public static void callEat(Animal animal) {
System.out.println("Animal is eating");
}
public static void callEat(Dog dog) {
System.out.println("Dog is eating");
}
即使您更改main
为
public static void main(String args[])
{
Animal a = new Dog();
callEat(a);
}
这将打印出来Animal is eating
,因为对的调用callEat
使用静态绑定,并且编译器仅知道其a
类型Animal
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句