静态绑定与动态绑定

时间:2016-05-22 11:01:03

标签: java dynamic binding static overloading

您好我不知道编译器如何确定执行哪个方法。我知道有编译时间和执行时间。我们有重载方法。

public class A{
    void print(A x){
        System.out.println("This is message A");
    }
}

public class B extends A{
    void print (B x){
        System.out.println("This is message B");
    }
}

A a = new A();
B b = new B();
A ab = new B();
b.print(a);
b.print(ab);

在两次通话中,结果都是:

这是消息A

2 个答案:

答案 0 :(得分:1)

这既不是超载也不是覆盖。其次,您不能指向具有子引用的父对象

答案 1 :(得分:-2)

Java中没有动态绑定。所有方法调用都在编译期间解析(除非使用反射,这不是这里的情况)

但是,类print()的{​​{1}}方法不会覆盖类B中的方法,因为参数的类型不同。此外,对编译器来说重要的是变量的正式声明,而不是它的赋值。因此,ab变量被称为A类型的对象。因此,编译器将调用A类的print(),因为它未在A

中覆盖