多态例题用Animal这个父类表示要治疗各种动物,动物由Person获取后治疗,每个动物有自己的治疗方案

public class Animal {
    private String name;
    private int age;
    private String gender;
    private int love;

    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 String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public int getLove() {
        return love;
    }

    public void setLove(int love) {
        this.love = love;
    }
    //这个方法不做实现,目的是让各自子类自己实现
    public void cure() {
        
    }

    public Animal(String name, int age, String gender, int love) {
        super();
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.love = love;
    }
    public Animal() {
        
    }
}

----

public class Person {
    private String name;

    // 已存在的类也可以作为其他类的属性
    private Dog dog;
    private QQ qq;
    private Cat cat;
    
    //获取方法,使用时System.out.print(d.getName());
    public String getName() {
        return name;
    }
    //设置方法使用时要在新构造的方法下讲就是new下调用该方法,如d.setName("dada")
    public void setName(String name) {
        this.name = name;
    }

    public Dog getDog() {
        return dog;
    }
    //设置方法使用时要在新构造的方法下讲就是new下调用该方法,如
    public void setDog(Dog dog) {
        this.dog = dog;
    }
    //获取方法,使用时System.out.print(Qq.);
    public QQ getQq() {
        return qq;
    }

    public void setQq(QQ qq) {
        this.qq = qq;
    }
    
    public Cat getCat() {
        return cat;
    }
    public void setCat(Cat cat) {
        this.cat = cat;
    }
    
    public Person() {
        // 无参构造方法
    }
    //创建全部参数构造方法
    public Person(String name, Dog dog, QQ qq) {
        this.name = name;
        this.dog = dog;
        this.qq = qq;
    }
    //创建唯一参数构造方法
    public Person(String name) {
        this.name = name;
    }
/*    //创建仅用于private Dog dog;的方法
    public void cure(Dog dog) {
        if (dog.getLove() < 60) {
            System.out.println("打药");
            System.out.println("辫子");
            System.out.println("蜡烛");
            dog.setLove(99);
        }
    }
    //上下两个方法属于重载
    public void cure(QQ qq) {
        if(qq.getLove()< 60) {
            System.out.println("充qq币");
            System.out.println("华腾");
            qq.setLove(90);
        }
    }
    */
    //使用多态方式用父类引用,传递子类实例(传递子类对象)
    public void cure(Animal animal) {
        if (animal.getLove() < 60) {
            //治疗方案交由各个动物去实现,所以给父类animal一个cure方法
            animal.cure();
            
        }
        
    }
}

--------------------------------------------------------------------------------------------------------------

public class QQ extends Animal {

    @Override
    public void cure() {
        System.out.println("充qq币");
        System.out.println("华腾");
        this.setLove(90);
    }

}

-------------------------------------------------------------------------------------------------

public class Dog extends Animal {

    @Override
    public void cure() {
        System.out.println("打药");
        System.out.println("辫子");
        System.out.println("蜡烛");
        this.setLove(99);
    }    
}

-------------------------------------------------------------------------------

public class Cat extends Animal {
    public void cure() {
        System.out.println("撸猫");
        System.out.println("撸猫");
        System.out.println("撸猫");
        this.setLove(90);
    }
    //生成一个由父类继承的有参构造函数,同时生成一个无参构造函数
    public Cat(String name, int age, String gender, int love) {
        super(name,age,gender,love);
    }
    public Cat() {
        // TODO Auto-generated constructor stub
    }
}

-----------------------------------------------------------------------------------------------------

public class Test {
    public static void main(String[] args) {
        Person oldwang = new Person("老王");

        Dog d = new Dog();
        d.setName("旺财");
        d.setAge(5);
        d.setGender("公");
        d.setLove(30);

        QQ qq = new QQ();
        qq.setAge(6);
        qq.setGender("母");
        qq.setLove(50);
        qq.setName("帝王企鹅");
        
        Cat cat = new Cat("mimi", 3, "公", 30);
        

        // 老王领养了狗
        oldwang.setDog(d);

        // 老王领养企鹅
        oldwang.setQq(qq);
        
        //老王领养猫
        oldwang.setCat(cat);
        
        //治疗狗
        System.out.println("治疗前" + d.getLove());
        oldwang.cure(d);
        System.out.println("治疗后" + d.getLove());
        
        //治疗企鹅
        System.out.println("治疗前" + d.getLove());
        oldwang.cure(qq);
        System.out.println("治疗后" + d.getLove());
        
        //治疗猫
        System.out.println("治疗前" + cat.getLove());
        oldwang.cure(cat);
        System.out.println("治疗后" + cat.getLove());
    }
}
 

 

---------------------------------------------------------------------------------------------

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值