这是个很基本的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("我是一辆拖拉机");
}
}