Rumah >Java >javaTutorial >Mengapa Mengalih Keluar Pembina Subkelas Menyebabkan \'Pembina Super Tersirat Tidak Ditakrifkan\' dalam Java?

Mengapa Mengalih Keluar Pembina Subkelas Menyebabkan \'Pembina Super Tersirat Tidak Ditakrifkan\' dalam Java?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-01 06:24:18384semak imbas

Why Does Removing Subclass Constructors Cause

Java Ralat: Implisit Super Constructor Undefined for Default Constructor

Dalam cubaan untuk mengurangkan lebihan kod, anda telah menghadapi ralat semasa mengalih keluar pembina daripada subkelas yang memanjangkan kelas abstrak. Ralat ini berpunca daripada pembina lalai tersirat yang dijana oleh pengkompil Java apabila kelas tidak mempunyai pembina yang ditakrifkan secara eksplisit.

Pembina lalai tidak mempunyai hujah dan bersamaan dengan public ACSubClass() { super(); }. Walau bagaimanapun, memandangkan BaseClass mengisytiharkan pembina, pembina lalai ini tidak tersedia, membawa kepada ralat masa kompilasi.

Sebab Ralat:

Punca punca isu ini terletak pada semantik warisan Java. Subkelas tidak mewarisi pembina kelas induknya secara automatik. Jika subkelas tidak mentakrifkan mana-mana pembina, ia secara tersirat mewarisi pembina lalai daripada kelas induknya.

Penyelesaian:

Untuk menyelesaikan ralat ini, anda mempunyai dua pilihan utama :

  • Takrifkan Pembina Lalai dalam BaseClass: Alih keluar pembina eksplisit daripada BaseClass (iaitu, alih keluar BaseClass awam(String someString)) untuk mendayakan pembina lalai.
  • Sediakan Pembina Tanpa Argumen Eksplisit dalam Subkelas: Jika BaseClass memerlukan hujah untuk membina contoh yang sah, anda boleh menambah eksplisit pembina tanpa hujah kepada subkelas. Sebagai contoh, dalam ASubClass: public ASubClass() { super(null); }. Ini memastikan subkelas boleh memanggil super() dengan hujah yang sesuai.

Key Takeaway:

Peraturan warisan pembina Java direka untuk menghalang subkelas daripada mencipta kejadian tidak sah bagi kelas induk mereka. Dengan mempertimbangkan dengan teliti keperluan pembina kedua-dua asas dan subkelas, anda boleh mengelakkan ralat masa jalan yang berkaitan dengan binaan yang hilang atau tidak sesuai.

Atas ialah kandungan terperinci Mengapa Mengalih Keluar Pembina Subkelas Menyebabkan \'Pembina Super Tersirat Tidak Ditakrifkan\' dalam Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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