Rumah > Java > javaTutorial > Mengapakah Subkelas Java Mendapat Ralat \'Implicit Super Constructor is Undefined\' dan Bagaimana Ia Boleh Dibetulkan?

Mengapakah Subkelas Java Mendapat Ralat \'Implicit Super Constructor is Undefined\' dan Bagaimana Ia Boleh Dibetulkan?

DDD
Lepaskan: 2024-11-29 14:34:11
asal
879 orang telah melayarinya

Why Does a Java Subclass Get an

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";
    }
}
Salin selepas log masuk

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();
}
Salin selepas log masuk

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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan