Scalaのextendsとself type annotationの区別は、「実際に拡張している(actually extending)」と「まだ拡張していない(doesn’t extend it yet)」の差異に対応する。
生成時点では、双方の機能に大差は無い。しかし単体水準のテストを可能にするという問題設定においては、self type annotationは「依存性注入(Dependency Injection)」の技術の一つとして、インターフェイス注入(Interface injection)やコンストラクタ注入(Constructor injection)と機能的に等価な問題解決策として数え上げられるだろう。
その際、依存性注入とGoFのStrategy Patternの区別を導入しておくことは、依存性注入の機能を特徴付ける上では欠かせない前提となる。特に委譲を利用したStrategy Patternはインターフェイス注入とほぼ同様の仕様を構成する。しかし、Strategy Patternの場合に構造化される依存関係は、依存性注入に比して短命である。self type annotationがオブジェクトそのものの代入であるのに対して、Strategy Patternは流動的諸要素となるアルゴリズムだけがカプセル化の対象となる。