May i suggest this...
A worker can't "work" without both a Hive or Garden. Supply both. Also, flower doesnt need to be a member variable. Its local to anotherDay(). Also, anotherDay() need not return Bee. The caller has reference to your object anyway.
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++;
}
}
Another approach is that Hive and Garden are not members at all, but are passed in for each methed call. eg anotherDay(Garden garden);
the benefits of this are that your worker can roam gardens. The drawback is that the calling code has to manage the Garden object. These are the trade offs you make as you do OO design :)