Gw mau tau Masalah berlian dari Pewarisan berbilang. Jelasin dalam bahasa melayu

Masalah berlian (diamond problem) merupakan masalah dalam pewarisan berbilang akibat ketaksaan wujud apabila dua kelas B dan C mewarisi kelas A, manakala D mewarisi kedua-dua B dan C. Jika ada kaedah (method) dalam A yang telah diatasi (override) oleh B dan/atau C, manakala D tidak mengatasi kaedah tersebut, maka versi kaedah yang diwarisi oleh D tidak dapat ditentukan dengan jelas sama ada daripada B atau C. Ini boleh mengakibatkan kod memberikan hasil di luar sangkaan pengaturcara.

Sebagai contoh, dalam konteks pembangunan perisian GUI, kelas Button mungkin mewarisi kedua-dua kelas Rectangle (untuk penampilan) dan Clickable (untuk kefungsian atau pengendalian input), kelas Rectangle dan kelas Clickable pula mewarisi kelas Object. Jika kaedah equals dipanggil melalui satu objek Button tetapi kaedah tersebut tidak wujud dalam kelas Button tetapi kaedah equals telah diatasi dalam salah satu atau kedua-dua kelas Button dan Rectangle, kaedah manakah yang sepatutnya dipanggil?

Masalah ini disebut "masalah berlian" sempena bentuk gambarajah pewarisan kelas bagi keadaan ini. Di sini, kelas A terletak di atas, B dan C masing-masing di bawahnya, makala D menyambungkan A dan B di bawah lalu menghasilkan bentuk berlian.