+---------------+
| <<metaclass>> |
| String |
+---------------+
↓インスタンス化
+---------------+
| String |
+---------------+
↓インスタンス化
+---------------+
| abc:String | ← String クラスのインスタンス
+---------------+
メタクラスをインスタンス化するとクラスが得られる。
クラスをインスタンス化するとオブジェクトが得られる。
んでもって、メタクラスは何から作られるかというとメタメタクラスというものがあったりする。
実はメタクラスのメタクラスはメタメタクラスであり、
メタメタクラスはメタクラスをインスタンス化したものであったりする。
鶏が先か卵が先かという問題になったりする。
実際の実装では途中までメタクラスを構築し、それを元にメタメタクラスを部分的に
構築して、そして、メタクラスを作ったりしているみたい。この辺りは怪しい。
ちなみに抽象クラスとは全く異なる概念。
+--------------+
| <<abstract>> |
| List |
+--------------+
△
|
|------------------+
| |
+--------------+ +------------+
| ArrayList | | LinkedList |
+--------------+ +------------+
この図での List が抽象クラスで上のメタクラスの図における String に相当する。