メタクラス
したがって、クラスへのメッセージ送信に伴うメソッド探索はObject classでは終了せず、クラスとしての振る舞いを定めたClassとそのスーパークラスパスにある二つのクラス(ClassDescriptionとBehavior。後述)を経てObjectに行き着くまで続行される。同時にこのことはSmalltalkにおいてクラスもオブジェクトである、すなわちクラスObjectの(サブ)インスタンスであり、通常のクラスのインスタンス同様Objectに定義されたメソッドをコールできることの理由をうまく説明している。
初期のSmalltalk(Smalltalk-76)には、同じくClassと名付けられたたったひとつのメタクラスしか用意されていなかった。つまりこのことは、すべてのクラスはClassのインスタンスであり、他のクラスと同じ共通のメソッドしか持つことができなかった(たとえば、新しいインスタンスを作るためのnewというメソッドなど)ということを意味する。その後、クラスが独自のメソッド(クラスメソッド)やインスタンス変数(クラスインスタンス変数と呼ばれる。クラスとそのインスタンスで共有できるクラス変数と混同されやすいが別物である)を持てるように、Smalltalk-80では改めてクラスそれぞれが固有のメタクラスが生成されるように拡張され今のかたちになった。
クラスのクラスであるメタクラスは、インスタンスのクラスである通常のクラスほどには独自性を要求されないので、すべてのメタクラスはMetaclassという名のひとつクラスのインスタンスとして位置づけられている。ちなみにMetaclassのメタクラスはMetaclass classだが、同時にこれは前述のルールに則りMetaclassのインスタンスでもある。