メタクラス
インスタンスメソッドの場合、たとえば整数の「2」というオブジェクトに何らかのメッセージを送ると、2が属するSmallIntegerというクラスから対応するメソッドがないか探し始める。SmallIntegerに見つからなければそのスーパークラスであるIntegerで...というようにスーパークラスを次々と手繰ってゆき、最後のObjectというルートクラスまで探索を続ける。
クラスメソッドの場合も考え方はほとんど変わらない。たとえばSmallIntegerというクラスに対してメッセージを送ると、メソッド検索はそのクラスであるSmallInteger classから開始される。そしてインスタンスメソッドの場合と同様に、SmallInteger classのスーパークラスであるInteger class、さらにそのスーパークラスを次々と手繰り、Object class(Objectクラスのメタクラス)まで探索を続ける。なおSmalltalkにおいては、メタクラスの継承関係は原則としてそのインスタンスであるクラスの継承関係と一致する。つまりSmallIntegerのスーパークラスがIntegerなら、そのメタクラス同士も同じ関係、すなわち、SmallInteger classのスーパークラスはInteger classである。ただしObject classだけは例外で、Objectのスーパークラスが未定義(nil)であるのに対し、Object classのスーパークラスはClassと定められている。