2016-05-08 17 views
0

我正在尝试在JAVA中学习OOP。我想制作一个简单的基于OOP的控制台应用程序。整个应用程序只有两个类:汽车和车库。OOP中两个类之间的相互作用

这是我的车库类:

public class Garage { 
    private int capacity; 


} 

这是我的车类:

public class Car { 
    private String type; 
    private String color; 

    public Auto(String type, String color){ 
     this.color = color; 
     this.type = type; 
    } 

    public String getColor(){ 
     return color; 
    } 

    public String getType(){ 
     return type; 
    } 

    public void Park(Garage garage){ 

    } 

} 

什么我不知道的是如何让他们彼此之间的互动。这意味着我不知道如何制作Park()方法。该方法应该简单地把车停在车库里,这样我就可以记下停放在车库里的所有车辆。

+0

作为的问题风格,你的方法应该从小写开始。 –

回答

1

在您的Garage类中,您可以添加一个列表以跟踪车库中的汽车。

private List<Car> carsParked; 


//just using arraylist as an example you could use any other of list or even a set if you so wish 
public Garage() { 

    carsParked = new ArrayList<>(); 
} 

,然后添加使用发言权的addCar法汽车到你的车库:

public void addCar(Car c) { 

    carsParked.add(c); 
} 

在汽车类的公园法,这样做:

public void park(Garage g) { 

     g.addCar(this); 
} 
0

你需要一种方式车库在你的车库。如果你事先知道你的车库的容量(比如2),你可以“硬编码”的车里面:

class Garage { 
    Car slot1; 
    Car slot2; 
} 

void Park(Garage g) { 
    if (g.slot1 == null) { 
     g.slot1 = this; 
    } else if (g.slot2 == null) { 
     g.slot2 = this; 
    } 
} 

如果你想输出你的车库里面所有的车,你可以通过测试这样做每个插槽为NULL(并且只打印非空插槽)。

这并不是一个很好的解决方案:

  • 如果你不知道插槽提前数,你要么不能在所有使用它,或者你会被迫产生大插槽数量覆盖最坏的情况。
  • 如果您的车库的容量将来发生变化,您必须手动将slot3/4/...添加到您的车库级别,并更新您的整个代码库,现在也考虑插槽3/4/..无论车库在哪里使用。
  • 也许你不在乎你的车停在哪个特定的位置,但你只是对你的车库包含什么车感兴趣。

为此,我们在Java中有'Collections'。它们允许我们在一个变量中存储任意数量的特定类型的对象。一个例子是LinkedList。我会得到你开始如何使用它:

class Garage { 
    LinkedList<Car> parkedCars; 
} 

现在你必须

  1. 初始化parkedCars在车库的构造。
  2. 通过调用Car.Park中的LinkedList.Add方法停放汽车。

一旦您解决了这两个问题,请考虑如果您连续多次停放同一辆车,会发生什么情况。这个结果是想要的吗?看看HashSet