定义一个动物类数组,向其中随意添加几个动物对象(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();
}
}
}