Jos abstrakti yläluokka "jyrsija" periytetään aliluokkaan "hiiri", niin miksi aliluokkaan ei voi laittaa useampaa konstruktoria?
Eli muiden konstruktorien tehtävä olisi alustaa Hiiri-luokka linkitetyn listan "solmuksi".
Jos taas yläluokassa/periytymättömässä luokassa on useampi konstruktori, ei tule virheilmoitusta.
Eli miten tuon oikein saa toimimaan?
public Hiiri(String nimi, int ika, String vari) { super(nimi, ika); this.vari=vari; this.jarjestysnro=jarjestysnro; } private String vari; private Hiiri next; private int jarjestysnro; /*linkkikenttä viittaa toiseen olioon, jos next on null, ei ole solmua mihin viitata */
Eli yläpuolella oleva rakenne toimii, mutta elmmista konstruktoreista tulee "herjaa" aaltosulkeiden käytöstä.
public Hiiri (int uusi_hiirulainen ){ jarjestysnro =uusi_hiirulainen; nimi = new String(""); ika=0; vari= new String(""); next = null; }// konstruktori joka alustaa uuden solmun public Hiiri (Hiiri vanha) { jarjestysnro = vanha.jarjestysnro; nimi = new String(vanha.nimi); ika=vanha.ika; vari= vanha.vari; next = null; } // konstruktori Yläluokan konstruktori näyttää tältä: public Jyrsija(String nimi, int ika) { this.nimi = nimi; this.ika = ika; }
Jos aliluokan konstruktoreiden pitää viitata yläluokkaan, niin miten se toteutetaan noiden kahden alemman aliluokan konstruktorin osalta?
public Hiiri (int uusi_hiirulainen ) { super("", 0); jarjestysnro = uusi_hiirulainen; vari= ""; next = null; } public Hiiri (Hiiri vanha) { super(vanha.nimi, vanha.ika) jarjestysnro = vanha.jarjestysnro; vari= vanha.vari; next = null; }
Perityssä luokassa pitää aina kutsua yläluokan konstruktoria. Jos sitä ei tee, kutsutaan automaattisesti tyhjää konstruktoria (ei parametreja), jos sellainen on (sitä ei taida olla, jos yläluokassa on joku konstruktori, joka ei ole tyhjä). Tyhjän konstruktorin puuttuminen tuossa tapauksessa taitaa aiheuttaa virheen.
Aihe on jo aika vanha, joten et voi enää vastata siihen.