比如说:
//A类中有方法:
class A
{
public void fun()
{
System.out.println("A.FUN");
}
}
//B类继承A类 重写fun
class B extends A
{
public void fun()
{
System.out.println("B.FUN");
}
}
class Test
{
B b =new B();
A a =b; // 父类引用指向子类对象
a.fun();
}
结果输出的是B.FUN
这里对象的类型是由创建它的类决定的,而不是由声明它的变量决定的 ,JAVA的重载默认是覆盖方式。即决定函数的调用的不是变量的类型,而是实际生成的对象的类型。
在上面的例子中,实际生成的是一个B类的对象,虽然将它赋给了一个A类的变量,但实际调用的仍是B类的方法。