多态的向上转型和向下转型 2016.12.8
我们都知道,方法的重写是导出类和基类的一种多态的表现,可以在实例化时将导出类向上转型为基类,但是这样的缺点是,向上转型只能实现基类中定义的方法,只不过在导出类中又将这些方法更加丰富了。
现实中,我们还需要在导出类中扩展基类中没有的方法,这就用到在实例化时向下转型才能实现导出类的扩展方法。
下面举例说明:
父类Cycle类:
package cn.qdu.transport;
class Cycle {
public void ride(){
System.out.println(" ride Cycle");
}
public String wheels(String name,int i){
System.out.println(name+"这种交通工具有"+i+"个轮子");
return name;
}
}
子类Unicycle类:不仅重写了父类ride()方法,还扩展了新的功能,添加了新方法balance()
package cn.qdu.transport;
class Unicycle extends Cycle {
@Override
public void ride(){
System.out.println("ride unicycle.");
}
public void balance(){
System.out.println("Unicycle balance");
}
}
主函数:
package cn.qdu.transport;
public class Test {
public static void main(String[] args) {
Cycle unicycle=new Unicycle();//向上转型
cycle.ride();
cycle.wheels("cycle", 2);
unicycle.ride();
unicycle.wheels("unicycle", 1);
((Unicycle)unicycle).balance();//向下转型
运行结果:
ride Cycle
cycle这种交通工具有2个轮子
ride unicycle.
unicycle这种交通工具有1个轮子
Unicycle balance