静态绑定和动态绑定

Abhinav:

我对动态绑定和静态绑定感到非常困惑。我已经读过,在编译时确定对象的类型称为静态绑定,而在运行时确定它的称为动态绑定。

下面的代码会发生什么:

静态绑定还是动态绑定?
这表明什么样的多态性?

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();
}
文森特·范·德·韦勒(Vincent Van der Weele):

您的示例是动态绑定,因为在运行时确定类型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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章