Ralat Pembina Super Tersirat dalam Pembina Java Lalai
Dalam Java, pembina lalai disediakan secara automatik oleh pengkompil untuk kelas yang tidak mentakrifkan secara eksplisit mana-mana pembina. Walau bagaimanapun, apabila kelas asas mentakrifkan pembina, pengkompil tidak lagi secara tersirat menjana pembina lalai untuk subkelasnya. Ini boleh mengakibatkan ralat "Pembina super tersirat tidak ditentukan untuk pembina lalai".
Contoh:
Pertimbangkan kod ini:
abstract public class BaseClass { String someString; public BaseClass(String someString) { this.someString = someString; } abstract public String getName(); } public class ACSubClass extends BaseClass { public ASubClass() { // default constructor // super(someString); // error: super() must be invoked in subclasses } public String getName() { return "name value for ASubClass"; } }
Di sini, ACSubClass tidak mempunyai pembina eksplisit. Sebaliknya, ia bergantung pada pembina lalai yang disediakan oleh pengkompil. Walau bagaimanapun, memandangkan BaseClass mentakrifkan pembina, tiada pembina lalai wujud untuk BaseClass. Ini membawa kepada ralat pengkompil, menyatakan bahawa pembina eksplisit mesti ditakrifkan dalam subkelas.
Penyelesaian:
Untuk menyelesaikan ralat ini, seseorang mesti menyediakan pembina eksplisit dalam subkelas yang memanggil pembina super menggunakan super(parameter). Sebagai alternatif, kelas asas boleh diubah suai untuk menyediakan pembina lalai.
// Option 1: Provide an explicit constructor in the subclass public class ACSubClass extends BaseClass { public ASubClass(String someString) { super(someString); } public String getName() { return "name value for ASubClass"; } } // Option 2: Modify the base class to have a default constructor abstract public class BaseClass { String someString; public BaseClass() {} // added default constructor public BaseClass(String someString) { this.someString = someString; } abstract public String getName(); }
Atas ialah kandungan terperinci Mengapakah Subkelas Java Mendapat Ralat \'Implicit Super Constructor is Undefined\' dan Bagaimana Ia Boleh Dibetulkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!