Rumah > Java > javaTutorial > Mengapa Java Tidak Mewarisi Pembina?

Mengapa Java Tidak Mewarisi Pembina?

Mary-Kate Olsen
Lepaskan: 2024-12-05 03:26:10
asal
929 orang telah melayarinya

Why Doesn't Java Inherit Constructors?

Warisan Pembina Java: Membongkar Misteri

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
  } 

}
Salin selepas log masuk

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);
  }

}
Salin selepas log masuk

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();
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan