Di Java, selama proses pembuatan subkelas, konstruktor kelas induknya harus dipanggil. Hal ini karena ketika ada hubungan pewarisan, subkelas tersebut harus mewarisi konten kelas induknya.
Jawabannya adalah sebagai berikut:
Saat Anda membuat objek subkelas baru, Anda harus terlebih dahulu membuat objek baru dari kelas induk. Objek kelas induk ini terletak di dalam objek subkelas. Oleh karena itu, objek subkelas lebih besar dari objek kelas induk situasi nyata dalam memori. Ketika metode konstruksi baru suatu objek, maka harus dipanggil. Jika Anda ingin baru objek kelas induk, Anda harus memanggil metode konstruksinya, jadi:
Aturan pertama: Selama proses konstruksi subkelas, metode konstruksi kelas induknya harus dipanggil. Untuk sebuah kelas, jika kita tidak menulis konstruktor, kompiler akan membantu kita menambahkan konstruktor default. Yang disebut konstruktor default adalah konstruktor tanpa parameter, tetapi jika Anda menulis konstruktor sendiri, maka kompiler akan melakukannya. ditambahkan untuk Anda, jadi terkadang ketika Anda membuat objek subkelas baru, konstruktor subkelas harus dipanggil, tetapi di konstruktor subkelas, kami tidak secara eksplisit memanggil konstruktor kelas dasar, artinya tidak ada Penulisan , seperti: super(); tidak ditulis seperti ini, tetapi akan memanggil konstruktor tanpa parameter kelas induk, jika tidak ada konstruktor tanpa parameter di kelas induk, akan terjadi kesalahan.
Aturan kedua: Jika tidak ada panggilan eksplisit ke konstruktor kelas dasar di konstruktor subkelas, sistem secara default akan memanggil konstruktor kelas dasar tanpa parameter Catatan: Jika tidak ada panggilan eksplisit ke konstruktor kelas dasar di konstruktor subkelas, dan tidak ada konstruktor tanpa parameter default di kelas dasar, terjadi kesalahan kompilasi. Oleh karena itu, biasanya kita perlu menampilkan: super (daftar parameter) untuk memanggil konstruktor kelas induk dengan parameter.
//Jika Anda mendefinisikan konstruktor baru
Hewan publik (Nama string) {
ini.nama = nama;
}
}
Anjing publik memperluas Hewan{
//Saat ini, Anda harus memanggil konstruktor kelas induk secara eksplisit, karena subkelas memanggil kelas induk secara default.
//Tidak ada konstruktor parameter Hewan()
Anjing publik(){
super("puppy"); //Menampilkan metode konstruktor berparameter untuk memanggil kelas induk
.... //Metode konstruktor yang memproses subkelas
}
}
//Tentu saja, jika Anda secara eksplisit menulis konstruktor tanpa parameter di kelas induk, misalnya:
kelas Hewan{
nama String pribadi;
//Metode konstruksi tanpa parameter
Hewan publik() {
..... //berurusan dengan
}
/*
Jika Anda mendefinisikan konstruktor baru, maka di konstruktor subkelas, Anda dapat memanggil konstruktor kelas induk tanpa memanggilnya secara eksplisit, karena subkelas tersebut memiliki konstruktor tanpa parameter.
Subkelas akan secara otomatis memanggil konstruktor tanpa parameter yang ditentukan oleh kelas induk di konstruktor.
*/
Hewan publik (Nama string) {
ini.nama = nama;
}
}