title: Builder pattern with inheritance
body: <p>I want to represent an web service URL request as an object, and found that there are lots of common parameters that could be "bubbled up" in an inheritance hierarchy. A request could have lots of parameters, some mandatory and other optional, for which I believe Bloch's Builder pattern is a nice option, emulating named arguments with a fluent interface.</p>
  
  <p>Specifically, I'm designing for the Google Maps web service API, that has as general web service request</p>
  
  <pre><code>http://maps.googleapis.com/maps/api/service/output?{parameters}
  </code></pre>
  
  <p><code>service</code> and <code>output</code> are mandatory arguments, and <code>sensor</code> a mandatory parameter. There is also an optional parameter <code>language</code>. </p>
  
  <p>Each service has its set of mandatory and optional parameters.The Geocode service has two optional parameters, <code>bounds</code> and <code>region</code>. It also has mutually exclusive mandatory parameters, <code>address</code> or <code>location</code>, that specify the type of service (direct or reverse geocoding, respectively). I represent this mutual exclusion with new children classes.</p>
  
  <p>I imagine the class hierarchy as such:</p>
  
  <pre><code>  .-----.
    | Url |
    '-----'
       ^
       |
  .---------.
  | Request |
  '---------'
       ^
       |----------------------------+--------------...
  .---------.                 .------------.
  | Geocode |                 | Directions |
  '---------'                 '------------'
       ^                            ^
       |------------+               .
   .--------.  .---------.          .
   | Direct |  | Reverse |          .
   '--------'  '---------'
  </code></pre>
  
  <p>Then, I would like to do something like the following:</p>
  
  <pre><code>String output = "xml";
  boolean sensor = true;
  String address = "Av. Paulista, São Paulo, Brasil";
  Bounds bounds  = new Bounds(-20, -10, -25, -20); //Geographic rectangle
  String region  = "br";
  String lang    = "pt-BR";
  Coord location = new Coord(-12,-22);
  
  DirectGeocodeRequestUrl direct = 
      new DirectGeocodeRequestUrl.Builder(output, sensor, address)
                                 .bounds(bounds)
                                 .language(lang)
                                 .build();
  
  ReverseGeocodeRequestUrl reverse = 
      new ReverseGeocodeRequestUrl.Builder(output, sensor, location)
                                  .language(lang)
                                  .region(region)
                                  .build();
  </code></pre>
  
  <p>How can I create a Builder that uses arguments and methods from the class and superclasses in which it is inserted?</p>