java上下转型

import java.util.Vector;

/**
 * 此类用于测试java的上下转型问题
 */

// 车
class Car {
 //成员
 Vector e=new Vector();
 
 public Vector getE(){
  return e;
 }
 
 public void add(Car c){
  e.add(c);
 }
 
 public void del(Car c){
  e.remove(c);
 }
 
 public void print() {
  System.out.println("我是一辆车");
 }
}

// 卡车
class Kache extends Car {
 public void print() {
  System.out.println("我是一辆卡车");
 }
}

// 拖拉机
class Tuolaji extends Car {
 public void print() {
  System.out.println("我是一辆拖拉机");
 }
}
/**
 * 测试
 */
public class MyTest {
 /**
  * 结论:java上转型不会有问题,但转型后引用的对象仍为子类<br>
  * java下转型需要强制转换,只有原来引用的对象与转换的对象一致时才正确,<br>
  * 否则会报java.lang.ClassCastException
  * @param args
  */
 public static void main(String[] args) {

  Car b = new Car();// 这是一辆车
  Kache kache = new Kache();// 这是一辆卡车
  Tuolaji tuolaji = new Tuolaji();// 这是一辆拖拉机
   
  //********测试1*********
//  b = kache;// 上转型 此时b就是一辆卡车
//  b.print();// 此时虽然类型为父类,但实际引用的对象仍为子类,输出:我是一辆卡车

  //********测试2*********
//  tuolaji = (Tuolaji)b;//下转型 强制把卡车变成拖拉机 肯定有问题(虽然编译不出错)  
//  b.print();// java.lang.ClassCastException: Kache cannot be cast to Tuolaji
  
  //********测试3*********
//  tuolaji = (Tuolaji) new Car();// 下转型 强制把随便一辆车变成拖拉机 肯定有问题(虽然编译不出错)
//  tuolaji.print();// java.lang.ClassCastException: Car cannot be cast to Tuolaji

  //********测试4*********
//  kache = (Kache) b; // 下转型 强制把卡车变成卡车 这样是没有问题的
//  kache.print();//ok
  
  //********测试5*********   
  //添加进去的是子类Kache,Tuolaji,取出时统一转型到父类Car但引用还是指向子类,
  //所以分别打印出"我是一辆卡车,我是一辆拖拉机" 
  b.add(kache);
  b.add(tuolaji); 
  Vector v=b.getE();
  for(int i=0;i<v.size();i++){
   Car c=(Car)v.elementAt(i);
   c.print();
  }
  

 }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值