public class Composite_car {
    public static void main(String[] args) {

        Car bmw_520d = new Car("BMW 520d");
        bmw_520d.make(4, true, 4);
        System.out.println(bmw_520d);

        Car benz_c_c = new Car("Mercedes Benz C-Class Cabriolet");
        benz_c_c.make(4, false, 2);
        System.out.println(benz_c_c);
    }
}

class Car {
    String name;
    Engine e;
    Door[] d;

    Car(String name){
        this.name = name;
    }

    void make(int cylinder, boolean isDiesel, int doorNum){
        e = new Engine(cylinder, isDiesel);
        d = new Door[doorNum];
        for (int i=0; i<d.length; i++){
            d[i] = new Door(true, true, true);
        }
    }

    @Override
    public String toString() {
        String message;
        message = name+" : "+e.cylinder+"기통, "+(e.isDiesel?"디젤, ":"가솔린, ")+"창문 개수("+d.length+") 자동창문"+(d[0].autoWindow?"O, ":"X, ")+
                "도어라이트"+(d[0].doorLight?"O, ":"X, ")+"열선시트"+(d[0].heatSeat?"O":"X");
        return message;
    }
}

class Engine{
    // number of cylinders
    int cylinder;
    // true == diesel, false == gasoline
    boolean isDiesel;

    Engine(int cylinder, boolean isDiesel){
        this.cylinder = cylinder;
        this. isDiesel = isDiesel;
    }
}

class Door{
    boolean doorLight;
    boolean heatSeat;
    boolean autoWindow;

    Door(boolean doorLight, boolean heatSeat, boolean autoWindow){
        this.doorLight = doorLight;
        this.heatSeat = heatSeat;
        this.autoWindow = autoWindow;
    }
}