Java中向下转型和instanceof

一、向下转型

与向上转型对应的是向下转型:向上转型详见博客

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

二、instanceof

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( )方法

猜你喜欢

转载自blog.csdn.net/benxiangsj/article/details/129545896