Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Metodin kutsuminen Javalla

kkkkkkk [02.12.2004 23:41:42]

#

Moi.

Yliluokassa Yla on metodi, metodi() {..}
Nyt haluan kutsua aliluokassa Ala metodia näin:
Yla a = new Yla(param);
String 1 = a;

Ja lopuksi itse metodin kutsu;
1.metodi();

Ei toimi, miksi ei ja miten kannattaisi toteuttaa. Ongelma on että aliluokkia on paljon, enkä halua toistuvasti tehdä hurjaa määrää if lauseita..

tsuriga [03.12.2004 00:12:43]

#

Hmm siis, eikös tuo a ole olio luokasta Yla, mitenkäs sen voisi merkitä String-olioksi? Ja en käyttäisi pelkkää ykköstä kutsumanimenä, edes esimerkeissä.

kkkkkkk [03.12.2004 00:33:28]

#

Niin sitä minäkin ihmettelin. Eli miten saisi laitettua muuttujan(joka on tekstiä) kutsuttavan metodin nimeen, tai onko se ylipäätään mahdollista?
Siis, muuttuja.metodi();

Minulla on nyt monta aliluokkaa jotka ovat perineet Auto yliluokan.
Aliluokkia esim. class Bemari, class Volvo, class Audi...

Nyt haluan pääohjelmassa käyttää yliluokan metodia kuluttaaBensaa();
Nyt käyttäjä valitsee ensin jonkun automerkin, 1:Audi jne.. ja se luetaan Lue.kluku(). Ajattelin nyt muuttaa saadun kokonaisluvun tekstiksi, jotta voisin viitata yliluokan metodiin. Minulla on metodi muutaTekstiksi() joka muuttaa esim. numero 1.n Stringiksi autoMalli = Audi; Siitä sitten yritin tavoitella tuota yliluokan metodia seuraavasti autoMalli.kuluttaaBensaa();
Tämä vaikuttaa itsestänikin(aloitteleva javaaja)täysin purkalta, joten kertokaa ihmeessä miten se kannattaa!

tsuriga [03.12.2004 00:53:36]

#

Tuosta muuttujaan/olioon viittaamisesta: Tee HashMap, jonka avaimina on luokkien nimet ja arvoina itse oliot. Voisi toimia.

Metodin kutsumisesta:
Jos et ole ylikirjoittanut sitä metodia niin eikös sitä voi kutsua ihan tyyliin bemari.kuluttaaBensaa()? On nyt kyllä mennyt jonkin verran aikaa siitä kun viimeksi koodailin Javalla.

FooBat [03.12.2004 13:37:15]

#

tsuriga kirjoitti:

Ja en käyttäisi pelkkää ykköstä kutsumanimenä, edes esimerkeissä.

En minäkään. Ei Java edes hyväksy numerolla alkavia muuttujan nimiä. Se saattaa olla eräs syy miksi tuo ei toimi.

kkkkkk kirjoitti:

Yla a = new Yla(param);
String 1 = a;

Ja lopuksi itse metodin kutsu;
1.metodi();

Mitä ihmettä oikein yrität tehdä tuossa.
1. Ellei Yla ole peritty String luokasta tuossa ei ole mitään järkeä.
2. numeroa ei voi käyttää muuttujana
3. 1.metodi(): olettaen, että 1 on nyt sitten String muuttuja, miten sille String-luokalle on yht'äkkiä ilmestynyt "metodi"-niminen metodi

class Auto {
  public void kulutaBensaa() {}
}
class Audi extends Auto {
  public void kulutaBensaa() {//tee jotain}
}
class Bemari extends Auto {
  public void kulutaBensaa() {//tee jotain muuta}
}

Auto a = new Audi();
Auto b = new Bemari();
a.kuluraBensaa();
b.kulutaBensaa();

tsuriga [03.12.2004 13:44:57]

#

Muistaakseni Stringiä ei voi edes periä, taitaa olla static final. Ymmärsin tuon noin, jotta hän haluaa kutsua bemari-olion Auto-luokasta perittyä kulutaBensaa-metodia, eli se jätettäisiin ylikirjoittamatta noissa alaluokissa.

Vastaus

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

Tietoa sivustosta