关于Java强制类型转化问题
这是我随便写的一个程序,想检测下向下转型public class Animal {
public String animal="animal";
}
public class Dog extends Animal {
public String dog="dog";
}
public class Text {
public static void main(String[] args) {
Animal animal=new Animal();
Dog dog=(Dog)animal;
}
}
系统提示如下错误,不解,还请高手指点:
Exception in thread "main" java.lang.ClassCastException: Youjianqin.Animal cannot be cast to Youjianqin.Dog
at Youjianqin.Text.main(Text.java:17)
----------------解决方案--------------------------------------------------------
http://329937021.javaeye.com/blog/545201
----------------解决方案--------------------------------------------------------
程序代码:
class Animal {
public String animal="animal";
}
class Dog extends Animal {
public String dog="dog";
}
public class Text {
public static void main(String[] args) {
Animal animal=new Dog();//父类的引用类型变量“指向”其子类的对象
Dog dog=(Dog)animal;
}
}
public String animal="animal";
}
class Dog extends Animal {
public String dog="dog";
}
public class Text {
public static void main(String[] args) {
Animal animal=new Dog();//父类的引用类型变量“指向”其子类的对象
Dog dog=(Dog)animal;
}
}
----------------解决方案--------------------------------------------------------
由上向下的转换首先要判断一下animal是不是dog对象,因为animal包括的范围比dog大,假如说是cat对象,那是不可能转换成dog的,这个意思好理解吧?
所以在转换之前先判断一下这个animal是不是属于Dog类型,加一条if语句来判断,这种用法很长见,最常用的就是重写equals()方法的时候。
这样就不会有异常了:
public class Animal {
public String animal="animal";
}
public class Dog extends Animal {
public String dog="dog";
}
public class Text {
public static void main(String[] args) {
Animal animal=new Animal();
if(animal instanceof Dog){
Dog dog=(Dog)animal;
}
}
}
----------------解决方案--------------------------------------------------------
谢谢各位大虾,了解了
----------------解决方案--------------------------------------------------------