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)新人,真心不懂,求解释!
不能从父类,转到子类;只能子类转到父类。
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);
}
}
像这样:
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等.
指明之后,c 既可以说是 Animal 又可以说 是 Cat.说的有点啰嗦了,总之一句话:
在不知晓 该Animal对象是不是Cat前,强制转换很危险,必需确定Ta 是Cat