与向上转型对应的是向下转型:向上转型详见博客
http://t.csdn.cn/4jcvE
1、作用:
将一个子类的对象经过向上转型后当成父类的方法使用,则无法调用子类的方法,为了解决这个问题,需要将父类引用再还原成子类即可,就称为向下转型。
2、编译实现
现在定义一个Animal类,再写一个Bird类继承Animal类,Bird类中有fly( )方法,我们现在想调用这个方法,就需要向下转型
定义一个Animal类,再写一个Bird类继承Animal类:
class Animal{public void eat(){System.out.println("吃食物");}
}
class Bird extends Animal{public void fly(){System.out.println("飞飞飞!!!!!");}
}
向下转型:
public class TestDemo {public static void main(String[] args) {Animal animal = new Bird(); //向上转型Bird bird = (Bird) animal; //向下转型bird.fly();}
1、问题:
向下转型有一个最大的特点是不安全,比如我们将一个Cat类向下转型为Bird类,继承了fly( )方法,但显然猫并不会飞,会转换失败
代码演示:
public class TestDemo {public static void main(String[] args) {Animal animal = new Cat(); //向上转型Bird bird = (Bird) animal; //向下转型bird.fly();}
}
2、作用
我们可以利用instanof来判断这个animal是否为Bird类,来提高安全性
代码演示:
public class TestDemo {public static void main(String[] args) {Animal animal = new Cat(); //向上转型if(animal instanceof Bird){ //编译器判断Bird bird = (Bird) animal; //向下转型bird.fly();}}
}
因为编译器判断此时的animal是父类引用的Cat类,所以并不会进行转换,因此也不会调用fly( )方法