调用其他类的类

时间:2012-07-02 19:26:28

标签: java class instantiation composition

我有一些课程。

在外观中,我有一个初学者类,它被实例化并从那里调用所有方法。

然后我有一个汽车类,车主类,车库类和停车位类

所以... Starter具有Car属性 Car具有Owner属性。
Car还具有Garage属性。
Garage有一个ParkingSpace属性

Stater类有一个getOwner()方法,可以在Car类中调用getOwner()方法

private Car car;
public Starter (String name){
    car = new Car(new Owner(name);
}

上面的第三行实例化了Car和Owner对象。现在,这允许我从各个类中调用各种方法。

我现在在Starter Class中有一个addParking()方法。 来自Starter Class的addParking()从Car Class调用addParking(),然后从GarageClass调用addParking(),然后将停车位添加到存储在Garage Class中的集合中。

我无法理解的是...... 我现在如何实例化Garage对象以及我实例化它?我的addParking()方法适用于Car,因为我有当我得到所有者时已经实例化了这个。所以我现在不能去......

Car car = new Car(new Grarage(new ParkingSpace(int x, int y, int z)));

或者我可以吗?这不会创建一个全新的Car对象吗?

2 个答案:

答案 0 :(得分:2)

  

我现在如何实例化Garage对象以及我该怎样做   实例化它?

通常,当我遇到这些问题时,我会回归自然和我的领域模型。 Garage课程应仅与停车位相结合,因为Garage必须有停车位,但可能没有Car或其中(还有)。

public class Garage{
  public Garage(ParkingSpace parkingSpace){
     //...
  }
}

现在,您可以在此Car中停放Garage,以便Garage有一个方法:

public void park(Car car){
}

现在可以通过以下方式链接这些代码:

Car car = new Car(owner);
Garage garage = new Garage(new ParkingSpace(...));
garage.park(car);
  

这不会创建一个全新的Car对象吗?

是的,Car car = new Car(new Grarage(new ParkingSpace(int x, int y, int z)));会创建新的CarGarageParkingSpace

答案 1 :(得分:0)

如果你调用构造函数肯定你会创建一个新的Garage实例。我认为你最好保留默认的构造函数并提供getter和setter或adder方法(你的汽车存储在集合中吗?)到Garage来创建你的对象之间的关系:稍后你可以考虑哪些关系不能被破坏,擦除setter并通过构造函数创建关系。

   class Garage { 

    public Garage(){}

    private ParkingSpace ps;

    public void setParkingSpace(ParkingSpace ps){
      this.ps = ps;
    }

    public ParkingSpace getParkingSpace(){
      return ps;
    }
    public void addCar(Car car){
     // add  to some collection...
     }
    public void removeCar(Car car){
      // and remove...
     }
    }

对象的生命周期似乎非常明显。 我会将停车场和公园与汽车分开,并且只在您需要时与设定者建立关系。 你需要思考两件事: 1)创建对象需要什么?它依赖于哪些其他对象? 2)你的关系只读或读写? 你似乎不需要一个公园来反映汽车。如果不是这种情况,那就在拥有Car之前创建Park,这是唯一的另一种方式。

    class ParkingSpace{
        private int x;
        private int y;
        private int z;

      public ParkingSpace(int x, int y,int z){
        this.x = x;
        this.y = y;
        this.z = z;
     }

     //... other methods
    }

    class  Park {

       private final List<ParkingSpace> parkingSpaces = new ArrayList<ParkingSpace>();

       public void addParkSpace(ParkingSpace ps){
         parkingSpaces.add(ps);
       }
       // other methods...

    }
     }

    class Car {

       private final Owner owner;
       private Park park;
       public Car(Owner o){
           this.owner = o;
       }

       public Owner getOwner(){
           return owner;
       }

       public Park getPark(){ return park}
       public void setPark(Park p){park = p}

并在代码中:

Owner o = new Owner("John Doe");
Car c = new Car(o);
Park p = new Park();
ParkingSpace ps = new ParkingSpace(1,2,3);
p.addParkSpace(ps);
car.setPark(p);