Driver.java:


public class Driver
{
    private String name; // For debugging purposes

    private Car car;

    public Driver(String aName)
    {
        name = aName;
    }

    public Car getCar()
    {
        return car;
    }

    public String getName()
    {
        return name;
    }

    public void setCar(Car aCar)
    {
        Car oldCar = car;

        car = aCar;
        if (oldCar != null && oldCar.getDriver() == this)
        {
            oldCar.setDriver(null);
        }

        if (aCar != null && aCar.getDriver() != this)
        {
            aCar.setDriver(this);
        }
    }

    // For debugging purposes
    public void print()
    {
        System.out.print("Driver's name is " + name);
        if (car == null)
        {
            System.out.println(" and has no car");
        }
        else
        {
            System.out.println(" and has car " + car.getName());
        }
    }
}
 

Car.java:


public class Car
{
    private String name; // For debugging purposes

    private Driver driver;

    public Car(String aName)
    {
        name = aName;
    }

    public Driver getDriver()
    {
        return driver;
    }

    public String getName()
    {
        return name;
    }

    public void setDriver(Driver aDriver)
    {
        Driver oldDriver = driver;

        driver = aDriver;
        if (oldDriver != null && oldDriver.getCar() == this)
        {
            oldDriver.setCar(null);
        }

        if (aDriver != null && aDriver.getCar() != this)
        {
            aDriver.setCar(this);
        }
    }

    // For debugging purposes
    public void print()
    {
        System.out.print("Car's name is " + name);
        if (driver == null)
        {
            System.out.println(" and has no driver");
        }
        else
        {
            System.out.println(" and has driver " + driver.getName());
        }
    }
}
 

MainProgram.java:


public class MainProgram
{
    /**
     * @param args
     */

    public static void main(String[] args)
    {
        Driver theDriver = new Driver("Troy McClure");
        Car car1 = new Car("Gas Guzzler");
        Car car2 = new Car("Electric");

        theDriver.setCar(car1);

        theDriver.print();
        car1.print();
        car2.print();

//        theDriver.setCar(null);
//
//        System.out.println();
//        theDriver.print();
//        car1.print();
//        car2.print();

        car2.setDriver(theDriver);

        System.out.println();
        theDriver.print();
        car1.print();
        car2.print();

    }

}