You mean those &quot;subtheoretical languages&quot; with &quot;practical aspects&quot; like deciding whether to use an abstract base class, which allows implementation inheritance for friends but violates encapsulation; or putting static final methods in an interface and using reflection to dynamically dispatch via a meta-object protocol to the contra-variant constructors of a private inner class?<p>All languages and paradigms can be obscure to outsiders. Just take a look at <a href="http:&#x2F;&#x2F;programmers.stackexchange.com&#x2F;questions&#x2F;tagged&#x2F;object-oriented" rel="nofollow">http:&#x2F;&#x2F;programmers.stackexchange.com&#x2F;questions&#x2F;tagged&#x2F;object...</a>