Rumah  >  Artikel  >  Java  >  Adakah Subkelas Java Sentiasa Perlu Memanggil Pembina Superclass secara Eksplisit?

Adakah Subkelas Java Sentiasa Perlu Memanggil Pembina Superclass secara Eksplisit?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-31 02:50:02950semak imbas

Do Java Subclasses Always Need to Explicitly Call the Superclass Constructor?

Mestikah Anda Secara Eksplisit Memanggil Pembina Kelas Super dalam Subkelas Java?

Apabila mentakrifkan subkelas, adalah amalan biasa untuk melihat pembina yang secara eksplisit memanggil pembina superclass menggunakan super(). Walau bagaimanapun, seseorang mungkin mempersoalkan jika ini perlu.

Adakah super() Ditambah Secara Automatik oleh Pengkompil?

Ya, jika pembina subkelas meninggalkan panggilan kepada superclass pembina, pengkompil secara automatik akan memanggil pembina tanpa hujah yang boleh diakses (pembina tanpa args) dalam superclass. Tingkah laku lalai ini dikenali sebagai perantaian pembina.

Jenis Pembina

  • Pembina tanpa args: Pembina tanpa parameter.
  • Pembina no-args yang boleh diakses: Pembina no-args dalam superclass yang boleh dilihat kepada subkelas (awam, dilindungi atau pakej-peribadi).
  • Pembina lalai: Pembina no-args awam ditambah oleh pengkompil apabila tiada pembina eksplisit dalam kelas.

Bila super( ) Diperlukan?

Menggunakan super() secara eksplisit hanya diperlukan jika:

  • Superclass tidak mempunyai pembina no-args yang boleh diakses.
  • The pembina subkelas termasuk parameter, dalam hal ini ia mesti memanggil pembina secara eksplisit dalam superclass yang menerima parameter tersebut.

Contoh 1:

<code class="java">public class Base {}
public class Derived extends Base {}</code>

Tidak panggilan eksplisit kepada super() diperlukan kerana Base mempunyai pembina lalai.

Contoh 2:

<code class="java">public class Base {
    public Base(int i) {}
}
public class Derived extends Base {
    public Derived(int i) {
        super(i); // Explicitly call the Base(int) constructor
    }
}</code>

Dalam kes ini, super(i) diperlukan kerana superclass tidak mempunyai pembina no-args, dan pembina subclass perlu menyediakan nilai awal untuk parameter inya.

Dengan memahami konsep ini, anda boleh mengelakkan panggilan super() yang tidak diperlukan dan memastikan rantaian pembina yang betul dalam subkelas anda.

Atas ialah kandungan terperinci Adakah Subkelas Java Sentiasa Perlu Memanggil Pembina Superclass secara Eksplisit?. 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