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..
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ä.
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!
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.
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();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.
Aihe on jo aika vanha, joten et voi enää vastata siihen.