天天看点

日常练习:用接口从动物数组中筛选出有play方法的对象

定义一个动物类数组,向其中随意添加几个动物对象(Dog,Cat,Wolf);

有的对象是宠物类(Dog,Cat),它们有play方法; 也有非宠物类(Wolf)是没有play方法的

创建一个接口play,让具有play方法的动物类(Dog,Cat)实现它;

在遍历动物数组的时候来个if条件判断就可以筛选出来了(注意引用时类型转换)

package classes;

//抽象动物类

abstract class Animal implements Eat{

    //抽象方法:吃

    public abstract void eat();

}

//接口:宠物

interface Pet{

    //抽象方法:玩

    void play();

}

//接口:吃

interface Eat{

    void eat();

}

//狗类  继承  动物类 , 实现 宠物接口

class Dog extends Animal implements Pet{

    //覆盖父类方法:吃

    public void eat(){

        System.out.println("Dog eat Bones");

    }

    //实现接口方法: 玩

    public void play(){

        System.out.println("Play with Dog");

    }

}

//猫类  继承  动物类 , 实现 宠物接口

class Cat extends Animal implements Pet{

    //覆盖父类方法:吃

    public void eat(){

        System.out.println("Cat eat fish");

    }

    //实现接口方法: 玩

    public void play(){

        System.out.println("Play with Cat");

    }

}

//狼类  继承  动物类

class Wolf extends Animal{

    //覆盖父类方法:吃

    public void eat(){

        System.out.println("Wolf eat meat");

    }

}

public class Test10{

    public static void main(String[] args){

        //1.定义一个Animal类型的数组as,存储多个不同子类对象

        Animal[] as = new Animal[] {new Dog(),new Cat(),new Wolf()};

        //2.调用as数组中所有动物的eat方法    

        for( int i = 0; i < as.length ; i++ ){

            if(as[i] instanceof Eat){

                Eat e1 = (Eat)as[i];

                e1.eat();

            }

        }

        //3.统计输出数组中宠物的个数

        int sumPet = 0;

        for( int i = 0; i < as.length ; i++ ){

            if( as[i] instanceof Pet )sumPet++;

        }

        System.out.println(sumPet);

        //4.调用数组as中所有宠物的play方法

        for( int i = 0; i < as.length ; i++ ){

            if( as[i] instanceof Pet ){

                Pet dp = (Pet)as[i];

                dp.play();

            }else System.out.println();

        }

    }

}