我已经搜索了关于堆栈溢出的后期绑定的所有类似问题,并且我非常不同意将此问题标记为重复的任何人.首先,我在另一个问题上找到了这个例子,但是我不明白在编译期间什么时候决定什么以及什么时候在运行时确定了什么我应该知道.基本上,我的问题的症结归结为两件事:
>在这个例子中,必须让我得出一个逻辑结论:一个方法是后期绑定,另一个方法是早期绑定
>我如何知道在Java中运行时或编译时决定执行哪个版本的方法的决定
码:
class A
{
public void foo()
{
System.out.println("Class A");
}
}
class B extends A
{
public void foo()
{
System.out.println("Class B");
}
}
public class C
{
public static void main(String [] args)
{
A a=new A();
B b=new B();
A ref=null;
/*
early binding --- calls method foo() of class A and
decided at compile time
*/
a.foo();
/* early binding --- calls method foo() of class B and
decided at compile time
*/
b.foo();
/* late binding --- --- calls method foo() of class B and
decided at Run time
*/
ref=b;
ref.foo(); }
}