Di Java, pembina kelas tidak diwarisi oleh subkelasnya. Pilihan reka bentuk ini telah mencetuskan persoalan lama: mengapa Java mengambil pendekatan ini?
Pertimbangkan kelas berikut:
public class Super { public Super(ServiceA serviceA, ServiceB serviceB, ServiceC serviceC){ this.serviceA = serviceA; //etc } }
Apabila subkelas, Son, mewarisi daripada Super, Java menuntut bahawa pembina diisytiharkan secara eksplisit dalam Son dengan parameter yang sama dengan yang terdapat dalam Super. Ini boleh membawa kepada kod berulang, seperti yang ditunjukkan di bawah:
public class Son extends Super{ public Son(ServiceA serviceA, ServiceB serviceB, ServiceC serviceC){ super(serviceA,serviceB,serviceC); } }
Ulangan ini menimbulkan persoalan: mengapa Java melarang pewarisan pembina?
Jawapannya terletak pada kemungkinan akibat sedemikian harta pusaka. Jika pembina diwarisi, setiap kelas akhirnya akan mewarisi pembina daripada Objek kelas asas. Ini bermakna setiap kelas, tanpa mengira tujuannya, akan mempunyai pembina tanpa parameter.
Reka bentuk sedemikian akan mewujudkan kesamaran. Sebagai contoh, kod berikut:
FileInputStream stream = new FileInputStream();
akan meninggalkan persoalan apakah parameter yang perlu dihantar kepada pembina. Kelas yang berbeza mungkin memerlukan parameter yang berbeza, menjadikan warisan sedemikian sangat tidak praktikal.
Walaupun terdapat senario di mana pembina lulus (pembina yang hanya memanggil pembina kelas super) berguna, Java dengan bijak memilih untuk tidak menjadikan ini sebagai tingkah laku lalai . Parameter yang berbeza-beza yang diperlukan untuk pembinaan subkelas memerlukan pengisytiharan eksplisit pembina dalam setiap kelas.
Atas ialah kandungan terperinci Mengapa Java Tidak Mewarisi Pembina?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!