public class BlackBird extends Bird { public BlackBird(String name) { super(name); } public void attack() { fly(); explode(); } } public class RedBird extends Bird { public RedBird(String name) { super(name); } public void attack() { fly(); hit(); } }public class Bird { private String bName;//小鸟名 public Bird(String name) { bName = name; } public void fly() {//飞行 System.out.println(bName +"is flying…"); } public void hit() {//撞击 System.out.println(bName +"hits the green pig!"); } public void explode() {//爆炸 System.out.println("Boom!!!"); } }根据这三个类,设计 GameStage 类,除构造方法和继承的属性或方法外,仅对外提供 setBird 和 startGame 方法。GameStage 可以存放多个类型为 RedBird 或 BlackBird 的 对象。 a) setBird 方法的功能为:若当前 GameStage 未满,则添加一个小鸟对象到 GameStage 中,否则打印“关卡已装不下更多小鸟了。” b) startGame 方法的功能为:若小鸟数大于 0,则让当前 GameStage 中的全 部小鸟对象逐一开展攻击,否则打印“没有小鸟可以进攻。”
时间: 2024-02-14 17:15:26 浏览: 105
可以这样设计 GameStage 类:
```
import java.util.ArrayList;
import java.util.List;
public class GameStage {
private List<Bird> birds; // 存放小鸟对象的列表
private int capacity; // 关卡容量
public GameStage(int capacity) {
this.capacity = capacity;
birds = new ArrayList<Bird>();
}
public void setBird(Bird bird) {
if (birds.size() < capacity) {
birds.add(bird);
System.out.println("成功添加小鸟:" + bird.getClass().getSimpleName());
} else {
System.out.println("关卡已装不下更多小鸟了。");
}
}
public void startGame() {
if (birds.size() > 0) {
for (Bird bird : birds) {
bird.attack();
}
} else {
System.out.println("没有小鸟可以进攻。");
}
}
}
```
在 GameStage 类中,我们使用了一个列表 birds 来存放小鸟对象。setBird 方法中,判断列表长度是否小于关卡容量,若是,则将小鸟对象添加到列表中,并输出添加成功的信息;否则,输出关卡已满的信息。startGame 方法中,判断列表长度是否大于 0,若是,则让列表中的每个小鸟对象逐一发起攻击;否则,输出没有小鸟可以进攻的信息。
注意,由于 RedBird 和 BlackBird 都是 Bird 的子类,因此可以将它们作为参数传递给 setBird 方法。在 startGame 方法中,由于 Bird 类中已经有了实现,因此无需再在 RedBird 和 BlackBird 中重复实现 attack 方法。
阅读全文