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.