2

我试图在一个SiloManager类中创建一个 Silo 类的两个对象,以便我可以访问这两个对象的方法。但我似乎无法使SiloManager构造函数工作,也无法正确实例化类。(我是java的初学者)。这是我的代码:

public class GrainSiloManager {

    public GrainSilo silo1 = new GrainSilo(100);
    public GrainSilo silo2 = new GrainSilo(50);


    public GrainSiloManager(GrainSilo silo1, GrainSilo silo2) {
        this.silo1 = silo1;
        this.silo2 = silo2;
    }

    private void showStatus() {
        System.out.println("The current grain in silo1 is: " + silo1.getGrain());
        System.out.println("The current grain in silo2 is: " + silo2.getGrain());
    }

}

正如我所说的,我是一个初学者,所以轻松一点,谢谢您的帮助。

4

2 回答 2

4
public GrainSilo silo1 = new GrainSilo(100);
public GrainSilo silo2 = new GrainSilo(50);


public GrainSiloManager(GrainSilo silo1, GrainSilo silo2) {
    this.silo1 = silo1;
    this.silo2 = silo2;
}

这将被编译为:

public GrainSilo silo1;
public GrainSilo silo2;


public GrainSiloManager(GrainSilo silo1, GrainSilo silo2) {
    this.silo1 = new GrainSilo(100);
    this.silo2 = new GrainSilo(50);
    this.silo1 = silo1;
    this.silo2 = silo2;
}

如您所见,这几乎没有意义。您正在使用传递给构造函数的对象覆盖您创建的对象。

于 2013-11-11T21:12:16.430 回答
0

您的构造函数将替换“public!” silo1 和 silo2 对象与传入的任何内容。您可以像这样更改构造函数

 public GrainSiloManager() {
    super();
 }

甚至更短(但等效)

 public GrainSiloManager() {
 }

然后像这样称呼它

 new GrainSiloManager().showStatus();

或者您可以使用您现有的方法(这将在您的构造函数中替换 GrainSoloManager.silo1 和 GrainSoloManager.silo2)

 GrainSilo silo1 = new GrainSilo(100);
 GrainSilo silo2 = new GrainSilo(50);
 new GrainSiloManager(silo1, silo2).showStatus();
于 2013-11-11T21:13:34.553 回答