Prinsip Substitusi Liskov pada dasarnya tidak membiarkan Anda terlalu sering menggunakan warisan implementasi: Anda tidak boleh menggunakan warisan hanya untuk penggunaan kembali kode (ada komposisi untuk ini)! Dengan mematuhi LSP, Anda dapat yakin bahwa sebenarnya ada "hubungan-is-a" antara superclass dan subclass Anda.
Apa yang dikatakannya adalah bahwa subclass Anda harus mengimplementasikan semua metode subclass dengan cara yang mirip dengan implementasi metode di subclass. Anda tidak boleh menimpa metode dengan mengimplementasikan NOP atau mengembalikan nol ketika supertipe melempar pengecualian; dinyatakan dalam persyaratan Desain oleh Kontrak, Anda harus menghormati kontrak metode dari superclass ketika mengganti metode. Cara untuk mempertahankan diri dari melanggar prinsip ini adalah dengan tidak pernah mengganti metode yang diterapkan; bukan mengekstrak antarmuka dan mengimplementasikan antarmuka itu di kedua kelas.
Prinsip Segregasi Antarmuka , Prinsip Tanggung Jawab Tunggal dan Prinsip Coehsion Tinggi dari GRASP entah bagaimana terkait; mereka merujuk pada fakta bahwa suatu entitas harus bertanggung jawab hanya untuk satu hal sehingga hanya ada satu alasan untuk perubahan sehingga perubahan dilakukan dengan sangat mudah.
Sebenarnya dikatakan bahwa jika sebuah kelas mengimplementasikan sebuah antarmuka maka ia harus mengimplementasikan dan menggunakan semua metode antarmuka itu. Jika ada metode yang tidak diperlukan di kelas tertentu, maka antarmuka tidak baik dan harus dibagi menjadi dua antarmuka yang hanya memiliki metode yang dibutuhkan oleh kelas asli. Ini dapat dianggap dari POV, yang berhubungan dengan prinsip sebelumnya dengan fakta bahwa ia tidak membiarkan Anda membuat antarmuka besar sehingga implementasinya dapat merusak LSP.
Anda dapat melihat Pembalikan Ketergantungan dalam Pola Pabrik; di sini baik komponen tingkat tinggi (klien) dan komponen tingkat rendah (contoh individu yang akan dibuat) tergantung pada abstraksi(antarmuka). Cara untuk menerapkannya dalam arsitektur berlapis: Anda tidak harus mendefinisikan antarmuka ke lapisan di lapisan yang diimplementasikan tetapi dalam modul yang disebut. Misalnya API ke lapisan sumber data tidak boleh ditulis dalam lapisan sumber data tetapi di lapisan logika bisnis, di mana ia perlu dipanggil. Dengan cara ini, lapisan sumber data mewarisi / tergantung pada perilaku yang didefinisikan dalam logika bisnis (dengan demikian inversi) dan bukan sebaliknya (seperti yang akan terjadi pada cara yang normal). Ini memberikan fleksibilitas dalam desain, membiarkan logika bisnis bekerja tanpa perubahan kode, dengan sumber data lain yang sama sekali berbeda.