Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java: Aliluokassa tulostaminen

Snifferi [17.03.2005 16:01:30]

#

Pannaanpa vielä tyhmä kyssäri:

Jos mulla on yliluokassa Auto attribuutti vaikka

private String väri;

Aliluokassa Henkilöauto konstruktori:

public Henkilöauto (String väri, ...omat attribuutit){
 super(väri);
 .
 .
 .
}

Miten saan aliluokassa tulostettua tuon private-attribuutin?

Esim.

public void tulosta() {

"Auton väri on: " + väri+  ...);

Ei mene läpi, tulee valitusta että väri has private access in Auto. Jos vaihtaa tuon yliluokan attribuutin protected-tyyppiseksi, sitten niitä pääsisi suoraan räpläämään (tulostamaan). Apina vaan haluaa, että ne on private-tyyppisiä :). Super-määre ei vissiin onnaa. Pitääkö tonne yliluokkaan laittaa palautusmetodit - ei kai sentäs. Kai tähän on taas joku ylisimppeli ratkaisu, ei vaan tajua :).

tsuriga [17.03.2005 16:08:10]

#

Esim. se getVari() metodi sinne yläluokkaan (super pois, tilalle vaikka this.vari = vari;)

Snifferi [17.03.2005 16:14:10]

#

Sehän on pakko heittää superilla yliluokkaan, kun se on sieltä peritty. Eikö?

FooBat [17.03.2005 16:30:16]

#

Voit muuttaa yläluokassa olevan värin tyypiksi protected, jolloin peritty luokka voi suoraan käyttää sitä (kuten myös kaikki muut samassa paketissa olevat luokat, mikä on vähän huonoa, jos et käytä useampia paketteja).

private muuttuja näkyy vain omassa luokassa, protected näkyy perityissä luokissa ja kaikissa saman paketin luokissa ja public kaikille luokille. Lisäksi, jos tyyppi-määritteen jättää pois, näkyy muuttuja kaikille saman paketin luokille.

Private muuttujan saamiseksi ulos jostain muusta luokasta kuin omasta ei ole mahdollista ilman luokassa olevaa palautusmetodia, ei edes perityissä luokissa. Sen takia niitä nimetää _private_ muuttujiksi.

Eli yläluokkaan getVäri (ja säilytetään se super(väri)) on ainoa ratkaisu, jos haluat säilyttää sen private tyypin.

Snifferi [17.03.2005 16:50:10]

#

Joo, tarkoitus on juurikin pitää attribuutit private-tyyppisinä.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta