日期:2014-05-20  浏览次数:20814 次

类型转换问题,来帮忙解决下

public class Test{
public static void main(String[] args){
A a = new A();
B b = new B();
A c = (B)a;//这里会报错
c.show();
}
}

class A{
int age;
String name;
public void show(){
System.out.print(age+" "+name);
}

}

class B extends A{
int age;
String name;
public void show(){
System.out.print(this.age+" "+this.name);
}
}


报错内容为:Exception in thread "main" java.lang.ClassCastException: A cannot be cast to B
at Test.main(Test.java:5)

新人,真心不懂,求解释!
------最佳解决方案--------------------
A c = b; 

是隐式转换,另一种是强者类型转换
------其他解决方案--------------------
那是说数据类型的!!如 Integer Double 等8种的转换
------其他解决方案--------------------
只能从B转为A,不能从A转为B。
不能从父类,转到子类;只能子类转到父类。
------其他解决方案--------------------
对象类型转换不是有两种吗?一种是向上类型转换,一种是向下类型转换,怎么就不能转换了呢???
------其他解决方案--------------------
public class Test {

public static void main(String[] args) {
A a = new A();
B b = new B();
//A c = (B) a;// 这里会报错
A c=(A)b;//只能子类强转为父类,父类不能强转为子类
c.show();
b.show();
a.show();
}
}

class A {
int age;
String name;

public void show() {
System.out.println("父类A:"+age + " " + name);
}

}

class B extends A {
int age;
String name;
public void show() {
System.out.println("子类B:"+this.age + " " + this.name);
}
}

------其他解决方案--------------------
1楼正解,结贴吧
------其他解决方案--------------------
父类:动物
子类:狗,猫
狗,猫一定是动物,动物一定是狗,猫吗?
------其他解决方案--------------------
 A c=(A)b;//只能子类强转为父类,父类不能强转为子类

像这样:
A c = b;


这里不强制转换也可以执行啊
------其他解决方案--------------------
楼上正解  顶一个
------其他解决方案--------------------
兄弟,这是多态问题!
有一种说法说“子类就是父类”,但是没有“父类就是子类”的说法哦···
因为子类继承与父类,所以子类可以随意地转换成为父类型(这也是Java Polymorphism(多态))的体现。因为这总是安全的,但是你如果非要进行向下类型转换的话,要将你要转换的对象 (先进行多态转换即向上类型转换);
只能这样:A a = new A();
        B b = new B();
        A c = (A)b;
          c.show();
这样才能具体知道该对象“c”是 B类型;
比如,Animal a = new Animal();
      Cat c = new Cat();
     要先:Animal d = (Animal)c; //告诉 Virtual Machine,c 是 Animal,因为他可以是 Dog等.