您的位置:首页 > 编程语言 > Java开发

JAVA向上转型和向下转型(三)

2017-03-11 15:54 435 查看
向下转型有什么用?

定义一个Animal父类:

public class Animal {

    public void eat(){

        System.out.println("吃饱了!");

    }

}

定义一个Bird类继承Animal:

public class Bird extends Animal {

    public void fly(){

        System.out.println("飞起来!!");

    }

}

定义一个Dog类继承Animal:

public class Dog extends Animal {

    public void run(){

        System.out.println("跑起来!!");

    }

}

编写一个zoo类,可以添加动物,并且饲养动物。

public class Zoo {

    public List<Animal> animals = new ArrayList<>();

    public void add(Animal a){

        animals.add(a);

    }

    public Animal getAnimal(String str){

        if("Dog".equals(str)){

            for(Animal a:animals){

                if(a instanceof Dog){

                    return a;

                }

            }

        }else if("Bird".equals(str)){

            for(Animal a:animals){

                if(a instanceof Bird){

                    return a;

                }

            }

        }

        return null;

    }

运行以下代码:

Zoo  z =  new Zoo();

        Dog  d =  new Dog();

        Bird b =  new Bird();

        

        //向上转型

        z.add(d);

        z.add(b);

        

        //向下转型

        Dog d1 = (Dog)z.getAnimal("Dog");

        Bird b1 = (Bird) z.getAnimal("Bird");

        

        d1.eat();

        d1.run();

        b1.eat();

        b1.fly();

得到结果:

吃饱了!

跑起来!!

吃饱了!

飞起来!!

在我们编程的过程中通常会把很多种类的子类实例对象全部扔到存放父类实例的集合。 经过了这个过程,子类实例已经赋值给了父类引用(即完成了向上转型),但很遗憾的丢失了子类扩展的方法。

当我们需要用到集合中子类实例其特有方法时,可以利用向下转型特性,重新获得丢失的方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: