title: Nomenclature: type relationships in OOP
body: <p>I'm familiar with the practical aspects of OOP. Now I'm writing a technical document and I'm questioning my use of terms.</p>
  
  <p><img src="https://i.stack.imgur.com/lsyZu.png" alt="enter image description here"></p>
  
  <p>Take this class hierarchy. Each class has zero, one, or more (multiple inheritance) classes it directly derives from. For B, this is A. I'd say that A is B's <em>base class</em> or <em>superclass</em> (interchangeably).</p>
  
  <p>Conversely, a class can have any number of classes directly deriving from it. I'd say that B and C are A's <em>derived classes</em> or <em>subclasses</em>, again interchangeably.</p>
  
  <p>Yet there must also be a term to refer to all classes a class <em>directly or indirectly</em> inherits from. How would you call {A, B} from D's perspective?</p>
  
  <p>And I'm missing another term for all classes <em>directly or indirectly</em> derived from a class. How would you call {B, C, D, E} from A's perspective?</p>