多态的综合实例

文章描述了一个Java编程示例,涉及Animal、Dog、Cat以及Person四个类。Dog和Cat类继承自Animal类,拥有各自特有的行为方法。Person类作为饲养员,有喂养宠物的方法,可以根据输入的动物类型调用相应的行为。在测试类中,展示了如何通过多态创建Dog和Cat对象,并通过Person对象进行喂养操作,打印出不同的喂养场景。
摘要由CSDN通过智能技术生成

**根据需求完成代码:**
                

1.定义狗类

    属性:
            年龄,颜色
    行为:
            1.eat(String something)            //(something表示吃的东西)
            2.看家lookHome方法(无参数)
    

2.定义猫类:

    属性:
            年龄,颜色
    行为:
            1.eat(String something)方法(something表示吃的东西)
            2.逮老鼠catchMouse方法(无参数)
        

3.定义Person类

//饲养员

    属性:
            姓名,年龄
    行为:

            1.keepPet(Dog dog,string somlething)方法
                    功能:喂养宠物狗,something表示喂养的东西
            
            2.keepPet(Cat cat,String something)方法
                    功能:喂养宠物猫,something表示喂养的东西
            
            3.生成空参有参构造,set和get方法

4.定义测试类(完成以下打印效果)

        1.keepPet(Dog  dog,Strign something) 方法打印内容如下
            年龄为30岁的老王养了一只黑颜色的2岁的狗2岁的黑颜色的狗两只前腿死死的抱住骨头猛吃
        
        2.keepPet(Cat cat,String something)方法   打印内容如下
            年龄为25岁的老李养了一只灰颜色的3岁的猫3岁的灰颜色的猫眯着眼睛侧着头吃鱼

5.思考:

    1.Dog和Cat都是Animal的子类,以上案例中针对不同的动物,定义了不同的keepPet方法,过于繁琐,能否简化,并体会简化后的好处?
    2.Dog和Cat虽然都是Animal的子类,但是都有其特有方法,能否想办法在keepPet中调用特有方法?

代码实例:

1.Animal类:Dog与Cat的父类

package test8_polymorphic_demo4;
//父类
public class Animal {
    private int age;
    private String color;

    public Animal() {
    }

    public Animal(int age, String color) {
        this.age = age;
        this.color = color;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public void eat(String something){
        System.out.println("动物吃"+something);
    }
}

Dog类:

package test8_polymorphic_demo4;

public class Dog extends Animal {

    public Dog() {
    }

    public Dog(int age, String color) {
        super(age, color);
    }

    public void eat(String something){
        System.out.println("狗吃"+something);
    }
    public void lookHome(){
        System.out.println("看家");
    }
}

Cat类:

package test8_polymorphic_demo4;

public class Cat extends Animal{

    public Cat() {
    }

    public Cat(int age, String color) {
        super(age, color);
    }

    public void eat(String something){
        System.out.println("小猫吃"+something);
    }

    public void catchMouse(){
        System.out.println("小猫逮老鼠");
    }

}

Person类:

package test8_polymorphic_demo4;

public class Person {
    private String name;
    private int age;

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void keepPet(Animal animal,String something){
        if(animal instanceof Dog d){
            System.out.println("年龄为"+age+"岁的老王养了一只"+d.getColor()+"颜色的"+d.getAge()+"岁的狗");
            System.out.println(d.getAge()+"岁的"+d.getColor()+"颜色的狗两只前腿死死的抱住"+something+"猛吃");
            //在此分别调用Dog类的eat()方法与Dog类特有的look方法,
            // 但如果用原先的animal调用eat()方法可以,如果调用lookHome()这个Dog类特有的方法就会报错
            d.eat(something);
            d.lookHome();//animal.lookHome()会报错,下面的cat类一样
        }else if(animal instanceof Cat c){
            System.out.println("年龄为"+age+"岁的老李养了一只"+c.getColor()+"颜色的"+c.getAge()+"岁的猫");
            System.out.println(c.getAge()+"岁的"+c.getColor()+"颜色的猫咪着眼睛侧着头吃鱼");

            c.eat(something);
            c.catchMouse();
        }else{
            System.out.println("没有这个类型!!!");
        }
    }
}

Test类(测试类):

package test8_polymorphic_demo4;

public class Test {
    public static void main(String[] args) {
        Animal animal1=new Dog(18,"黄");//利用多态创建Dog类
        Animal animal2=new Cat(8,"白");//利用多态创建Cat类

        Person person=new Person("王卫",38);//创建饲养员Person对象
        //打印Dog类动作
        person.keepPet(animal1,"猪大骨");
        System.out.println("——————————————————————————此处为分界线——————————————————————————");
        //打印Cat类动作
        person.keepPet(animal2,"鱼");




    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值