java上下转型

这是个很基本的java问题,看下注释就清楚了 
但由它可以联想出其它很多东西 

package complex.java.cast;

 

/**

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

 *

 * @author gaol

 *

 */

 

//

public class Car {

    public void print() {

       System.out.println("我是一辆车");

    }

 

    /**

     * 结论: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();// 这是一辆拖拉机

 

       b = kache;// 上转型 此时b就是一辆卡车

       b.print();// 此时虽然类型为父类,但实际引用的对象仍为子类

                 // 输出:我是一辆卡车

       // tuolaji = (Tuolaji)b;//下转型 强制把卡车变成拖拉机 肯定有问题(虽然编译不出错)

 

       // tuolaji = (Tuolaji) new Car();// 下转型 强制把随便一辆车变成拖拉机 肯定有问题(虽然编译不出错)

       kache = (Kache) b; // 下转型 强制把卡车变成卡车 这样是没有问题的

       kache.print();

    }

}

 

// 卡车

class Kache extends Car {

 

    public void print() {

       System.out.println("我是一辆卡车");

    }

 

    public void print1() {

       System.out.println("我是一辆卡车");

    }

 

}

 

// 拖拉机

class Tuolaji extends Car {

    public void print() {

       System.out.println("我是一辆拖拉机");

    }

 

    public void print1() {

       System.out.println("我是一辆拖拉机");

    }

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值