FooInterface次のシグネチャを持つインターフェイスがあるとします。
interface FooInterface {
    public function doSomething(SomethingInterface something);
}
そして、ConcreteFooそのインターフェースを実装する具体的なクラス:
class ConcreteFoo implements FooInterface {
    public function doSomething(SomethingInterface something) {
    }
}
ConcreteFoo::doSomething()特別なタイプのSomethingInterfaceオブジェクトが渡された場合、ユニークな何かをしたいと思います(と呼ばれますSpecialSomething)。
メソッドの前提条件を強化するか、新しい例外をスローする場合、それは間違いなくLSP違反ですが、SpecialSomething汎用SomethingInterfaceオブジェクトのフォールバックを提供しながらオブジェクトを特別にケースに入れた場合でもLSP違反になりますか?何かのようなもの:
class ConcreteFoo implements FooInterface {
    public function doSomething(SomethingInterface something) {
        if (something instanceof SpecialSomething) {
            // Do SpecialSomething magic
        }
        else {
            // Do generic SomethingInterface magic
        }
    }
}
doSomething()メソッドの目的は型変換になりSpecialSomethingます:受け取っSpecialSomethingた場合、オブジェクトを変更せずに返しますが、汎用SomethingInterfaceオブジェクトを受け取った場合、アルゴリズムを実行してSpecialSomethingオブジェクトに変換します。前提条件と事後条件は同じままなので、契約に違反したとは思わない。