我有一个类Worker,我想从hive,garden和超类花的所有子类访问方法。一个工人在花园里的蜂房里穿着一个arraylist,花园也有一个花的arraylist。我使用构造函数从hive访问了方法:
public worker(Hive hive){
this.hive= hive
}
我想从花园中获取方法findFlower()以获得一朵花和extractPollen()(每种类型的花从超类花中继承)从我得到的花朵中获取花粉。我是否需要为花园和每种花卉制作更多的构造函数,或者需要2个构造函数,1个用于花园,1个用于超级构造函数的花朵工作?
到目前为止我的代码:
public class Worker extends Bee {
Hive hive = null;
public Garden garden;
public Flower flower;
public Worker(Hive hive){
this.hive=hive;
this.type = 2;
this.age=11;
this.health=3;
}
public Bee anotherDay(){
flower= garden.findFlower();
flower.extractPollen(int);
eat();
age++;
}
}
public class Garden{
ArrayList<Flower> flowerbed = new ArrayList<Flower>();
public Flower findFlower(){
//code which returns a random flower from my arraylist
}
}
public class Flower{
public boolean extractPollen(int po){
if(po <= pollen){
pollen= pollen - po;
return true;
}return false;
}
}
答案 0 :(得分:1)
你可以试试;
public class Garden {
ArrayList<Flower> flowerbed = new ArrayList<Flower>();
private static Garden instance;
public Flower findFlower(){
//code which returns a random flower from my arraylist
}
public static Garden getInstance() {
if (instance == null) {
instance = new Garden();
}
return instance;
}
}
这将返回Garden的一个实例,并允许您使用
访问findFlowerGarden.getInstance().findFlower();
第一次调用getInstance()时,它将创建一个新的Garden
答案 1 :(得分:1)
我可以建议......
如果没有蜂巢或花园,工人就无法“工作”。供应两者。此外,花不需要是成员变量。它本地到另一个日()。另外,anotherDay()不需要返回Bee。无论如何,呼叫者都会引用您的对象。
public class Worker extends Bee {
private Hive hive;
private Garden garden;
public Worker(Hive hive, Garden garden){
super(hive);
this.hive=hive;
this.garden = garden;
this.type = 2;
this.age=11;
this.health=3;
}
public void anotherDay(){
Flower flower = garden.findFlower();
flower.extractPollen(/* some value */);
eat();
age++;
}
}
另一种方法是Hive和Garden根本不是成员,但是每次调用都会被传入。例如anotherDay(Garden garden);
这样做的好处是你的工人可以在花园里漫步。缺点是调用代码必须管理Garden对象。这些是你在做OO设计时所做的权衡:)