上一篇文章是用继承来实现猎人打猎这个故事,但是我发现有许多地方是冗余的,增加了代码量。这次用接口实现
结构
代码
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());
}
}
结果
猎人张三开始打猎了!
猎人发现了大老虎
啊啊啊,打死了???
啊!!!我死了!!!
老虎状态:死的