猎人打猎(三)----接口实现

上一篇文章是用继承来实现猎人打猎这个故事,但是我发现有许多地方是冗余的,增加了代码量。这次用接口实现

结构

这里写图片描述

代码

Ianimal.java

package com.a.in;

public interface Ianimal {
    public void death() ;
}

Animal.java

package com.a.po;

import com.a.in.Ianimal;

public class Animal implements Ianimal {
    private String name ; 
    private String state ;

    public Animal() {}

    public Animal(String name, String state) {
        this.name = name;
        this.state = state;
    }

    public String getName() {
        return name;
    }

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

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    /* 
     * @see com.a.in.Ianimal#death()
     * 重写death方法
     */
    @Override
    public void death() {
        state = "死的";
        System.out.println("啊!!!我死了!!!");
    }
}

Iarms.java

package com.a.in;

public interface Iarms {
    public Ianimal peng(Ianimal animal); 
}

Gun.java

package com.a.po;

import com.a.in.Ianimal;
import com.a.in.Iarms;

public class Gun implements Iarms {
    @Override
    public Ianimal peng(Ianimal animal) {
        System.out.println("啊啊啊,打死了???"); //这里无法调用到animal的getName()方法,这就是一个局限
        animal.death();
        return animal;
    }
}

Ipeople.java

暂没有,摆设作用

Hunter.java

package com.a.po;

import com.a.in.Ipeople;

public class Hunter implements Ipeople {
    private String name ;
    public String getName() {
        return name;
    }

    public Hunter(String name) {
        this.name = name;
    }

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

    private Animal animal;

    public Animal getAnimal() {
        return animal;
    }

    public void setAnimal(Animal animal) {
        this.animal = animal;
    }

    public void shoot(Animal animal, Gun gun) {

        gun.peng(animal);

    }
}

Test.java

package com.a.test;

import com.a.po.Animal;
import com.a.po.Gun;
import com.a.po.Hunter;

public class Test {

    public static void main(String[] args) {
        Hunter hunter = new Hunter("张三");
        Gun gun = new Gun();
        Animal animal = new Animal("大老虎", "活的");
        System.out.println("猎人" + hunter.getName() + "开始打猎了!");
        System.out.println("猎人发现了" + animal.getName());
        hunter.shoot(animal, gun);
        System.out.println("老虎状态:" + animal.getState());
    }
}

结果

猎人张三开始打猎了!
猎人发现了大老虎
啊啊啊,打死了???
啊!!!我死了!!!
老虎状态:死的

总结:可以看出用接口实现这个故事,还是有瑕疵,虽然代码量少了,但是在Gun类中不能调用animal的getName()等方法,同理在Hunter类中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值