Rumah > Java > javaTutorial > Mengapa Mesti `this()` dan `super()` Menjadi Pernyataan Pertama dalam Pembina Java?

Mengapa Mesti `this()` dan `super()` Menjadi Pernyataan Pertama dalam Pembina Java?

Mary-Kate Olsen
Lepaskan: 2024-12-29 11:31:16
asal
1002 orang telah melayarinya

Why Must `this()` and `super()` Be the First Statement in a Java Constructor?

Menguatkuasakan Perintah Pelaksanaan Pembina: Mengapa ini() dan super() Mesti Pernyataan Pertama

Java dengan tegas menguatkuasakan bahawa jika ini() atau super() digunakan dalam pembina, ia mestilah pernyataan pertama. Sekatan ini memastikan bahawa jujukan pemula pembina untuk kelas induk dan anak berlaku dalam susunan yang betul.

Pertimbangkan contoh berikut:

public class MyClass {
    public MyClass(int x) {}
}

public class MySubClass extends MyClass {
    public MySubClass(int a, int b) {
        super(c); // Compile error
        int c = a + b;
    }
}
Salin selepas log masuk

Panggilan kepada super(c) dalam pembina MySubClass akan mengakibatkan ralat masa kompilasi kerana ia bukan pernyataan pertama. Pengkompil memerlukan pembina kelas induk dipanggil dahulu, memulakan keadaan kelas induk sebelum pembina subkelas boleh dilaksanakan.

Salah satu cara untuk menyelesaikan ralat ini ialah menyusun semula kod:

public class MySubClass extends MyClass {
    public MySubClass(int a, int b) {
        super(a + b); // OK
    }
}
Salin selepas log masuk

Di sini, pengiraan c dilakukan dalam hujah kepada super(), membenarkan pembina kelas induk dipanggil pertama.

Contoh lain menunjukkan cara sekatan menghalang kod yang salah daripada melaksanakan:

public class MyClass {
    public MyClass(List list) {}
}

public class MySubClassA extends MyClass {
    public MySubClassA(Object item) {
        List list = new ArrayList();
        list.add(item);
        super(list); // Compile error
    }
}
Salin selepas log masuk

Kod cuba mencipta senarai dan menyerahkannya kepada pembina kelas induk, yang tidak dibenarkan. Jika sekatan tidak ada, kod itu mungkin gagal dengan ralat semasa memanggil kaedah pada kelas induk sebelum ia dimulakan.

Menguatkuasakan this() dan super() menjadi pernyataan pertama memastikan bahawa pembina urutan invocation adalah betul, menjamin permulaan yang betul bagi kelas induk dan anak di Java.

Atas ialah kandungan terperinci Mengapa Mesti `this()` dan `super()` Menjadi Pernyataan Pertama dalam Pembina Java?. 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