// An example of the fragile base-class problem, adapted from Effective Java by
// Joshua Bloch, Addison-Wesley, 2001.
//
// CS 310 - Object-Oriented Programming in Java
// Spring 2008.


class Set {

  private Object elements [] = new Object [10];
  private int next = 0;

  void add(Object o) { 
    assert next < elements.length;
    elements[next++] = o;
    }

  void add(Set set) { 
    for (Object e: set.elements)
      add(e);
    }

  int size() {
    return next;
    }
  }


class CountingSet
extends Set {

  private int count = 0;

  void add(Object o) {
    count++;
    super.add(o);
    }

  void add(Set set) {
    count += set.size();
    super.add(set);
    }

  int getCount() {
    return count;
    }
  }


class test {
  public static void
  main(String args[]) {
    CountingSet cs1 = new CountingSet();
    cs1.add("Moe");
    cs1.add("Manny");
    cs1.add("Jack");

    CountingSet cs2 = new CountingSet();
    cs2.add(cs1);

    System.out.println("cs2 count is " + cs2.getCount());
    }
  }


syntax highlighted by Code2HTML, v. 0.9.1