本帖最后由 李盼 于 2012-6-15 12:48 编辑
这就是父类引用指向子类对象,也就是多态三要素之一!
多态三要素即:1.要有继承关系。2.要有子类重写父类的方法。3.要有父类引用指向子类对象。
首先,我们要知道子类在调用构造方法时,都会先调用父类的构造方法创建一个父类的实例对象,就算我们没有写这段代码,系统也会默认一个super引用。所以,当一个子类被实例化对象时,在它之前已经存在了一个父类的实例化对象。而父类的引用实际上指向的就是这个子类实例中的父类实例对象。由此我们可知,这个引用只能调用子类继承的父类方法,而不能调用子类特有的方法,那么既然这样,大家为什么都还热衷于这么写呢?这不是明显的局限性吗?
好处当然是有的,还是以 List<String> list = new ArrayList<String>();为例,我们知道,ArrayList具有对集合中的元素快速查找的特点,但是其增删速度较慢。如果后期我们发现增删速度太慢了,想改用增删速度快的LinkedList,那么我们只用修改这一句代码为List<String> list = new LinkedList<String>();而不用去修改后面大量用lis存取数据的代码,这就极大的提高了代码的扩展性,便于我们后期修改维护。
我们在使用一个子类时,如果不需要调用子类特有的方法,我们尽量用父类引用指向子类对象的方式编写代码。
|