Hi David,

Your example is really interesting (surprising to me, actually).  Aren't
we having fun doing "Ruby language analysis"? :)

I think your example can be shortened to this:

  class S < String
    def speak
      puts "Hello, I contain: #{self}"
    end
  end  
       
  a = S.new("one")
  puts "a.class = #{a.class}"                 # a.class = S
  puts "(a+'two').class = #{(a+'two').class}" # (a+'two').class = String

Well, a "mechanical" explanation may be that class S calls the String
class '+' method, which *always* creates a new object of class
String.  But is it good from the "philosophical" point of view that

    Class_A + Class_B = Class_B (or even some other Class_C)

and not always Class_A?                              

(I would care less if the method is other than '+'...)

Regards,

Bill