概念:
方法可以在沿着继承链的多个类中实现,子类可以重写父类的方法。JVM决定运行时调用哪个方法。这就是动态绑定。
原理:
假设,对象o是类C1的实例,其中C1是C2的子类,C2是C3的子类,那么o也是C2,C3的实例。如果对象o调用一个方法p,JVM会依次在类C1,C2,C3中查找方法p的实现,直到找到为止。
代码解释:
public class Test1 {
public static void main(String[] args)
{
m(new GraduateStudent()); //创建GraduateStudent的实例并运用m方法
m(new Student()); //创建Student的实例并运用m方法
m(new Person()); //创建Person的实例并运用m方法
m(new Object()); //创建Object的实例并运用m方法
}
public static void m(Object o) //m方法,输出对象的toString表示
{
System.out.println(o.toString());
}
}
class GraduateStudent extends Student //GraduateStudent类继承Student类
{
}
class Student extends Person //Student类继承Person类
{
@Override
public String toString()
{
return "Student";
}
}
class Person extends Object //Person类继承Object类
{
@Override
public String toString()
{
return "Person";
}
}
结果显示:
Student
Student
Person
java.lang.Object@7852e922
总结:
动态绑定体现了Java的继承与多态,在继承链中,JVM一直沿着继承链动态找到带有该方法的实现。
欢迎大家在评论区留言讨论~~