java 向下转型

本文通过Java代码示例详细介绍了向下转型(downcasting)的概念及其在运行时类型信息(RTTI)中的应用。展示了如何在继承结构中使用向下转型来调用子类特有的方法,并说明了可能出现的ClassCastException异常。

向下转型参照下面两示例,编译错误IDE会报错

package object;
import java.lang.*;
import java.util.*;
class Cycle{
    public int ride(Cycle i) 
    {
        return i.wheel();
    }
    public int wheel()
    {
        return 0;
    }
}

class Uncicycle extends Cycle{
    public int wheel()
    {
        return 1;
    }
    public void balance(){System.out.println("Tricycle");}
}
class Bicycle extends Cycle{
    public int wheel()
    {
        return 2;
    }
    public void balance(){System.out.println("Bicylcle");}
}
class  Tricycle extends Cycle
{
    public int wheel()
    {
        return 3;
    }
   
}

public class CycleTest extends Cycle{
    public  int ride(Cycle c)
    {
        return c.wheel();
    }
    public static void main(String[] args)
    {
        Cycle[] cy= {
                new Uncicycle(),
                new Bicycle(),
                new Tricycle(),
        };
        
        //((Uncicycle)cy1).balance();
        ((Uncicycle)cy[0]).balance();
        ((Bicycle)cy[1]).balance();
        ((Uncicycle)cy[2]).balance();//Exception in thread "main" java.lang.ClassCastException: object.Tricycle cannot be cast to object.Uncicycle
                                     //  at object.CycleTest.main(CycleTest.java:54)
    }
}
package object;
//: polymorphism/RTTI.java
// Downcasting & Runtime type information (RTTI).
// {ThrowsException}

class Useful {
  public void f() {}
  public void g() {}
}

class MoreUseful extends Useful {
  public void f() {}
  public void g() {}
  public void u() {}
  public void v() {}
  public void w() {}
}    

public class RTTI {
  public static void main(String[] args) {
    Useful[] x = {
      new Useful(),
      new MoreUseful()
    };
    x[0].f();
    x[1].g();
    // Compile time: method not found in Useful:
    //! x[1].u();
    ((MoreUseful)x[1]).u(); // Downcast/RTTI
    ((MoreUseful)x[0]).u(); // Exception thrown
  }
} ///:~

 

转载于:https://www.cnblogs.com/jiangfeilong/p/10203257.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值