Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java Perintä Esimerkki

Sivun loppuun

hevonen [25.11.2008 12:39:12]

#

On pääluokka Ihminen. Sllä on kaksi alaluokkaa Matti ja Teppo. Pääluokassa on metodi puhua(). 1. Kuinka voi laittaa Matin ja Tepon puhumaan eri tavalla?

2. Eli ongelma on, kuinka voin tarkistaa alaluokan, joka määrää, mitä tulostetaan?

Pseudokielenä tarkoitus olisi seuraavanlainen metodi:

public String puhua(classname){
   if(classname==Matti)
      return "Mat";
   if(classname==Teppo)
      return "Tep";
}

Kuinka saman idean voi toteuttaa Javassa? Ehkä tuollainen metodi ei ole paras vaihtoehto.

Teuro [25.11.2008 12:49:52]

#

Yritä ymmärtää luokan ja olion erot. Luokka on kuin muotti, ja olio on yksi piparkakku. Luokan avulla yritetään kuvata jotakin abstraktia asiaa esimerkkisi mukaisesti ihmistä, jolla on metodi puhu (ei puhua). Oliot ovat esimerkiksi matti ja teppo, näitä ei kannata periyttää alaluokiksi.

class Ihminen{
  public:
    void puhu( std::string teksti ){
      std::cout << teksti << std::endl;
    }
};

int main(){
  Ihminen *matti = new Ihminen;
  Ihminen *teppo = new Ihminen;

  teppo -> puhu( "heippa" );
  matti -> puhu( "jeps" );

  delete matti;
  delete teppo;

  return EXIT_SUCCESS;
}

Jaska [25.11.2008 12:58:45]

#

Eikös tuo ole C++:aa eikä Javaa?

Teuro [25.11.2008 13:04:06]

#

Jaska kirjoitti:

Eikös tuo ole C++:aa eikä Javaa?

Idean kannalta ei suurempaa merkitystä, kummalla kielellä on tehty itse implementaatio. Javan syntaksi ei ole mulla erityisen hyvin hallussa. Idean ymmärtäminen vastauksessa on tärkeintä.

hevonen [25.11.2008 13:10:07]

#

Teuro kirjoitti:

Luokka on kuin muotti, ja olio on yksi piparkakku. Luokan avulla yritetään kuvata jotakin abstraktia asiaa esimerkkisi mukaisesti ihmistä, jolla on metodi puhu (ei puhua). Oliot ovat esimerkiksi matti ja teppo, näitä ei kannata periyttää alaluokiksi.

Olen täysin samaa mieltä kanssasi. Sain kuitenkin tehtävän annon, jossa käsketään tekemään Matista ja Teposta alaluokkia, niin että pääluokan metodi tulostaa molemmille erilaista tekstiä.

Jackal von ÖRF [25.11.2008 13:12:51]

#

Periytymisellä se menee näin: http://javala.cs.tut.fi/show.do?category­=periytyminen#aliluokat

hevonen [25.11.2008 13:27:22]

#

Jackal von ÖRF kirjoitti:

Periytymisellä se menee näin: http://javala.cs.tut.fi/show.do?category­=periytyminen#aliluokat

Kiitti! Erinomainen esimerkki :)

tsuriga [25.11.2008 13:35:33]

#

Yritä muistaa Javala jatkossakin, melkein puolet Muut-alueen ykkössivun aiheista liittyy sun kotiläksyihin. Jos on oikiasti niin, että sen pääluokan metodin pitää tulostaa jotain, niin alaluokkien (ts. aliluokkien, jos Wiklan termejä käytetään) pitää kutsua yläluokan (eli yliluokan) metodia, joka ottaa parametrikseen vaikkapa merkkijonon: super("Matti"); / super("Teppo");. Tai parsii kutsujan kutsuntapinosta.

hevonen [25.11.2008 18:28:34]

#

tsuriga kirjoitti:

Jos on oikiasti niin, että sen pääluokan metodin pitää tulostaa jotain, niin alaluokkien (ts. aliluokkien, jos Wiklan termejä käytetään) pitää kutsua yläluokan (eli yliluokan) metodia, joka ottaa parametrikseen vaikkapa merkkijonon: super("Matti"); / super("Teppo");. Tai parsii kutsujan kutsuntapinosta.

Juuri näin se menee - eli alaluokasta kutsutaan metodia pääluokan "piirrustuksissa", koska abstraktista luokasta ei voi tehdä instanssia.
Esimerkiksi koodi olisi mahdollisesti:

class Teppo extends Ihminen {
   public Teppo(double weight){
      super(weight);
   }

//jos on metodi käytössä tuossa pääluokassa Ihminen, niin se saadaan mukaan
    public String annaPuhe(){
      return "Teppo teppo";
   }
}

Sivun alkuun

Vastaus

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

Tietoa sivustosta