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