本帖最后由 刘文超 于 2013-1-3 10:49 编辑
楼上的回答已经很精彩了,
对于父类对象想转换为子类,必须强制准换才行,不能使默认的。
但这个例子主要不是多态,多态是向上转型的。
下边我给lz介绍一下多态吧:
把不同的子类(child1和child2)对象都当作父类(parent)来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。
因此,程序就具备了通用性和可扩展性,正是面向对象的核心所在。
多态的3个条件:
1、要有继承关系,正如:class Child extends Parent;
2、要有方法的重写:我们想要用多态实现什么功能,就要将这个功能的方法从父类重写,用来之后的动态绑定;
3、父类引用指向子类对象原则。
下边我给楼主一个小例子,以示多态的条件,及优点。
大家都知道ArrayList和LinkedList都实现了List接口,这可以说是一种继承关系。
ArrayList是顺序存储,查询方便,增删繁琐;
LinkedList是链式存储,查询繁琐 但增删容易;
我们定义集合的时候如果用了多态,就可以根据我们后来的情况选择来决定到底用哪个集合了、
代码:- package org.qyx.online;
- import java.util.*;
- public class TestCastDown {
- public static void main(String[] args) {
- List list=new ArrayList();
- /*
- * 只把上面这句改为
- new LinkedList() 就可以了,其他什么都不用动,岂不快哉!--------可扩展
- 用父类引用指向子类对象的好处就是:
- 我们的list虽然是ArrayList,但只能执行List接口里边实现来的东西,约束它不能整出自己的东西,
- 不然换成LinkedList可能就不好使了--------通用
- */
- list.add("l1");
- list.add("l2");
- list.add("l3");
- list.add("l4");
- }
- }
复制代码 |