Dalam upaya saya untuk menulis kode yang lebih baik dan lebih bersih, saya belajar tentang prinsip-prinsip SOLID. Dalam hal ini, LSP terbukti sedikit sulit untuk dipahami dengan baik.
Keraguan saya adalah bagaimana jika saya memiliki beberapa metode tambahan dalam subtipe saya, S, yang tidak ada dalam tipe, T, apakah ini akan selalu menjadi pelanggaran terhadap LSP? Jika ya, lalu bagaimana extendsaya kelas saya?
Misalnya, katakanlah kita memiliki Birdtipe. Dan subtipe-nya adalah Eagledan Humming Bird. Sekarang kedua subtipe memiliki beberapa perilaku umum sebagai Bird. Tetapi Eaglejuga memiliki perilaku predator yang baik (yang tidak ada pada Birdtipe umum ), yang ingin saya gunakan . Karenanya, sekarang saya tidak akan bisa melakukan ini:
Bird bird = new Eagle();
Jadi apakah memberi Eagleperilaku ekstra itu melanggar LSP?
Jika ya, maka itu berarti saya tidak dapat memperpanjang kelas saya karena itu akan menyebabkan pelanggaran LSP?
class Eagle extends Bird {
//we are extending Bird since Eagle has some extra behavior also
}
Perluasan kelas harus diizinkan sesuai dengan prinsip Terbuka / Tertutup bukan?
Terima kasih sebelumnya telah menjawab! Seperti yang Anda lihat dengan jelas, LSP membuat saya bingung seperti apa pun.
Sunting: Lihat jawaban SO ini. Dalam hal ini lagi, ketika Carmemiliki perilaku tambahan seperti ChangeGear, itu melanggar LSP. Jadi, lalu bagaimana kita memperluas kelas, tanpa melanggar LSP?