首页 > 代码库 > 多态的向上转型和向下转型 2016.12.8

多态的向上转型和向下转型 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

 

多态的向上转型和向下转型 2016.12.8