访问另一个类中的方法

时间:2013-12-10 00:38:41

标签: java class methods arraylist superclass

我有一个类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;
    }
}

2 个答案:

答案 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的一个实例,并允许您使用

访问findFlower
Garden.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设计时所做的权衡:)