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)新人,真心不懂,求解释!

解决方案 »

  1.   

    只能从B转为A,不能从A转为B。
    不能从父类,转到子类;只能子类转到父类。
      

  2.   

    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);
    }
    }
      

  3.   

    那是说数据类型的!!如 Integer Double 等8种的转换
      

  4.   

     A c=(A)b;//只能子类强转为父类,父类不能强转为子类
    像这样:
    A c = b;这里不强制转换也可以执行啊
      

  5.   

    A c = b; 是隐式转换,另一种是强者类型转换
      

  6.   

    兄弟,这是多态问题!
    有一种说法说“子类就是父类”,但是没有“父类就是子类”的说法哦···
    因为子类继承与父类,所以子类可以随意地转换成为父类型(这也是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等.
       指明之后,c 既可以说是 Animal 又可以说 是 Cat.说的有点啰嗦了,总之一句话:
    在不知晓 该Animal对象是不是Cat前,强制转换很危险,必需确定Ta 是Cat