1.1 基本概念(简单,自己理解)
继承:在令子类别继承父类别的同时,可以重新定义某些属性,并重写某些方法,即覆盖父类别的原有属性和方法,使其获得与父类别不同的功能。
多态:使用父类对象的地方都可以使用子类的对象。多态意味着父类型的变量可以引用子类型的对象。
1.2 动态绑定
方法可以在沿着继承链的多个类中实现。JVM决定运行时调用哪个方法。
问题引出:已知GeometricObject()是Object的子类。toString方法在Object中定义,在GeometricObject内重写。
Object o = new GeometricObject();
System.out.println(o.toString);
求问,这里的o调用的哪个toString()呢?
为了回答这个问题,首先介绍两个术语:声明类型和实际类型
一个变量必须被声明为某种类型,变量的这个类型被称为它的声明类型,这里o的声明类型就是Object。
一个引用类型变量可以是一个null值或者是一个对声明类型实例(实例可以使用声明类型或它的子类型的构造方法创建)的引用。变量的实际类型是被变量引用的对象的实际类。这里o的实际类型是GeometricObject,o调用哪个toString()方法是由o的实际类型决定的,这称为动态绑定。会不停的向父类上面找相应的方法,直到在某一层找到这个方法(从实际类型子类到父类顺序找)进行调用。在编译时,编译器会根据参数类型、参数个数和参数顺序找到匹配的方法。