天天看點

日常練習:用接口從動物數組中篩選出有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();

        }

    }

}