This will save an array of subclasses in a class attribute named 
`subclasses'. It may not be the most efficient way of doing it, but it 
works.

   class Class
     def inherited(subclass)
       if superclass.respond_to? :inherited
         superclass.inherited(subclass)
       end

       @subclasses ||= []
       @subclasses << subclass
     end

     def subclasses
       @subclasses
     end
   end

   class SuperClass; end

   class A < SuperClass; end
   class B < SuperClass; end
   class C < SuperClass; end
   class D < A; end

   puts SuperClass.subclasses.join(", ")  # A, B, C, D

If you only need one superclass, this is more efficient:

   class MyClass
     def self.inherited(subclass)
       if superclass.respond_to? :inherited
         superclass.inherited(subclass)
       end

       @subclasses ||= []
       @subclasses << subclass
     end

     def self.subclasses
       @subclasses
     end
   end


Cheers,
Daniel