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
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
Vastaukset 4
Vanhimmat
Voi laittaa. Konstruktoreissa pitää kutsua yliluokan konstruktoria.
public Hiiri(Hiiri vanha) {
super(vanha.nimi, vanha.ika);
/* ... */
}
public Hiiri(int uusi_hiirulainen) {
super("", 0);
/* ... */
}
Yläluokassa on yksi ainoa konstruktori, täytyykö siinä olla yhtä monta kuin aliluokassakin? Kun pelkkä viittaus superiin ei poistanut ongelmaa. Alla ote yläluokan konstruktorista ja luokasta.
public class Jyrsija {
protected String nimi;
protected int ika;
public Jyrsija(String nimi, int ika) {
this.nimi = nimi;
this.ika = ika;
}
Ei tarvitse vaan yksi riittää. Kaikki aliluokan konstruktorit voivat käyttää sitä yhtä yliluokan konstruktoria, (kuten nuo kaksi esimerkki konstruktoria teki). Olisi hyvä jos voisit laittaa sen virhe ilmoituksen tänne tai sitten koko koodin.
Eikös tämä seuraava ole aika turhaa:
nimi = new String(vanha.nimi);
nimi = new String("");
Kun voi laittaa:
nimi = vanha.nimi;
nimi = "";