Apakah pemanggilan super()
konstruktor harus menjadi baris pertama konstruktor? Jika ya, mengapa? Mengapa saya tidak dapat melakukan beberapa perhitungan sederhana dan terbatas sebelum pemanggilan konstruktor, misalnya perhitungan parameter konstruktor?
Saya menemukan situasi dengan konstruktor kelas dalam yang dapat dipanggil dengan spesifikasi penutupan:
class A {
class Inner1 {
Inner1() {
// do something
}
}
}
class B {
A a1 = new A();
A a2 = new A();
class Inner2 extends A.Inner1 {
Inner2(boolean sel) {
(sel?a1:a2).super();
}
}
}
Kasus ini menunjukkan kita ingin memilih instance terlampir untuk konstruktor kelas dasar. Mengapa logika seleksi harus dibatasi? Mengapa seseorang tidak bisa menulis sesuatu seperti ini
if( sel ) {
a1.super();
}
else {
a2.super();
}
TAMBAHAN
Yang saya maksud dengan pertanyaan saya adalah batasannya bisa seperti dalam kasus berikut:
public class Base {
private final String content;
public Base(String content) {
this.content = content;
}
public String getContent() {
return content;
}
}
public class Derived extends Base {
public Derived(String content) {
super(String.format("Current value of content is %s.", getContent()));
}
}
Dalam kasus terakhir saya:
1) Memenuhi syarat super()
berada pada baris pertama
2) Melanggar tata tertib pembangunan
3) Dapatkan kesalahan kompiler "Tidak dapat merujuk ke metode instance saat secara eksplisit memanggil konstruktor"
Jadi, mengapa kita tidak bisa menghapuskan "persyaratan baris pertama" dan hanya mengandalkan kesalahan seperti yang terakhir?
super()
harus ditempatkan sebagai baris pertama panggilan konstruktor jika Anda menggunakannya - tetapi periksa utas ini: stackoverflow.com/questions/9675431/ atau ini: stackoverflow.com/questions/1168345/ - person wkl   schedule 24.05.2012super()
. Java akan menghentikan program Anda dan meminta Anda untuk memperbaikinya. - person Hunter McMillen   schedule 24.05.2012super()
terlebih dahulu tidak menyelesaikan semua masalah dan justru menimbulkan banyak masalah baru. Ini merupakan penyederhanaan, karena ini berarti kita tidak perlu membagi alokasi dan inisialisasi objek menjadi dua bagian terpisah. Dan saya berasumsi hal ini menghindari satu jenis masalah yang mungkin sering muncul. - person Voo   schedule 24.05.2012