Viittaaminen aliluokan metodiin

Tietämätön?

Osaako joku sanoa, miten voidaan viitata yliluokan taulukko-oliosta aliluokan metodiin?

6

761

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • foobarfoo

      Samanlailla kuin normaalin luokan metodiin. Eli jotain tän tyylistä yliluokassa:

      //aliluokat-olio on List ilmentymä
      for(Aliluokka aliluokka : aliluokat){
      aliluokka.metodiX();
      }

      • keksa1

        //Alaluokka extends Ylaluokka. Molemmissa metodi getMjono(omanluokannimi)

        Ylaluokka lk1 = new Ylaluokka();
        Ylaluokka lk2 = new Alaluokka();
        Alaluokka lk3 = new Alaluokka();

        Ylaluokka[] instanssit = {lk1,lk2,lk3};

        System.out.println(instanssit[0].getMjono());
        System.out.println(instanssit[1].getMjono());
        System.out.println(instanssit[2].getMjono());

        //tulostaa

        Ylaluokka
        Alaluokka
        Alaluokka

        Javassa on käytössä late binding ja ylikirjoitettu metodi ajetaan luokan instanssista joka sen ylikirjoittaa

        Alaluokan sisällä voi kutsua koodissa Ylaluokan-metodia super.getMjono();

        C#:ssa taitaa defaulttina olla käytössä early binding eli castaamalla voi kutsua yläluokan metodia alaluokan instanssista (tää on kyllä mututietoa)

        Alaluokka lk1 = new Alaluokka();
        ((Ylaluokka)lk1).getMjono(); //tulostaa Ylaluokka


      • Tietämätön?
        keksa1 kirjoitti:

        //Alaluokka extends Ylaluokka. Molemmissa metodi getMjono(omanluokannimi)

        Ylaluokka lk1 = new Ylaluokka();
        Ylaluokka lk2 = new Alaluokka();
        Alaluokka lk3 = new Alaluokka();

        Ylaluokka[] instanssit = {lk1,lk2,lk3};

        System.out.println(instanssit[0].getMjono());
        System.out.println(instanssit[1].getMjono());
        System.out.println(instanssit[2].getMjono());

        //tulostaa

        Ylaluokka
        Alaluokka
        Alaluokka

        Javassa on käytössä late binding ja ylikirjoitettu metodi ajetaan luokan instanssista joka sen ylikirjoittaa

        Alaluokan sisällä voi kutsua koodissa Ylaluokan-metodia super.getMjono();

        C#:ssa taitaa defaulttina olla käytössä early binding eli castaamalla voi kutsua yläluokan metodia alaluokan instanssista (tää on kyllä mututietoa)

        Alaluokka lk1 = new Alaluokka();
        ((Ylaluokka)lk1).getMjono(); //tulostaa Ylaluokka

        Kiitos avusta, mutta entä jos metodi on vain alaluokassa? Sen nimistä metodia ei ole yläluokassa ja nyt olen yläluokassa ja tarvitsen alaluokan metodia. Uusia metodeja ei voi kirjoittaa, vaan siihen täytyisi päästä käsiksi kutsumalla sitä alaluokasta. Onko tämä edes mahdollista? Jos laitan muuttuja.metodi(); niin mihin väliin voisin työntää sen alaluokan, josta se pitää hakea?


      • foobarfoo
        Tietämätön? kirjoitti:

        Kiitos avusta, mutta entä jos metodi on vain alaluokassa? Sen nimistä metodia ei ole yläluokassa ja nyt olen yläluokassa ja tarvitsen alaluokan metodia. Uusia metodeja ei voi kirjoittaa, vaan siihen täytyisi päästä käsiksi kutsumalla sitä alaluokasta. Onko tämä edes mahdollista? Jos laitan muuttuja.metodi(); niin mihin väliin voisin työntää sen alaluokan, josta se pitää hakea?

        Käytetään ylempää esimerkkiä hyväksi hiukan muuttaen:
        //Alaluokka extends Ylaluokka. Aliluokassa on metodi getAlijono(omanluokannimi)


        Ylaluokka lk1 = new Ylaluokka();
        Ylaluokka lk2 = new Alaluokka();
        Alaluokka lk3 = new Alaluokka();

        Ylaluokka[] instanssit = {lk1,lk2,lk3};
        for(int i = 0; i


      • foobarfoo
        foobarfoo kirjoitti:

        Käytetään ylempää esimerkkiä hyväksi hiukan muuttaen:
        //Alaluokka extends Ylaluokka. Aliluokassa on metodi getAlijono(omanluokannimi)


        Ylaluokka lk1 = new Ylaluokka();
        Ylaluokka lk2 = new Alaluokka();
        Alaluokka lk3 = new Alaluokka();

        Ylaluokka[] instanssit = {lk1,lk2,lk3};
        for(int i = 0; i

        Huoh, kokeillaas uudestaan.

        for(int i=0; i pienempi kuin instanssit.length; i ){
        if(instanssit[i] instanceof Alaluokka){
        Alaluokka ala = (Alaluokka)instanssit[i];
        System.out.println(ala.getAlijono());
        }
        }
        //tulostaa
        Alaluokka
        Alaluokka


      • Nimimerkki.
        foobarfoo kirjoitti:

        Huoh, kokeillaas uudestaan.

        for(int i=0; i pienempi kuin instanssit.length; i ){
        if(instanssit[i] instanceof Alaluokka){
        Alaluokka ala = (Alaluokka)instanssit[i];
        System.out.println(ala.getAlijono());
        }
        }
        //tulostaa
        Alaluokka
        Alaluokka

        Eikö tuossa voisi olla:

        if(instanssit[i] instanceof Ylaluokka)


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Mistä puhuitte viimeksi kun näitte

      Kerro yksi aiheista
      Ikävä
      101
      7463
    2. 83
      5092
    3. Se on hyvästi

      Toivottavasti ei tavata.
      Ikävä
      79
      4889
    4. Olenko saanut sinut koukkuun?

      Hyvä. Rakastan sua.
      Ikävä
      132
      4288
    5. Alavuden sairaala

      Säästääkö Alavuden sairaala sähkössä. Kävin Sunnuntaina vast. otolla. Odotushuone ja käytävä jolla lääkäri otti vastaan
      Ähtäri
      10
      3068
    6. Miksi sä valitsit

      Juuri minut sieltä?
      Ikävä
      52
      2709
    7. Sisäsiittosuus

      Tämän kevään ylioppilaista 90% oli sama sukunimi?
      Suomussalmi
      43
      2632
    8. Kerro nyt rehellisesti fiilikset?

      Rehellinem fiilis
      Suhteet
      53
      2267
    9. Törkeää toimintaa

      Todella törkeitä kaheleita niitä on Ylivieskassakin. https://www.ess.fi/uutissuomalainen/8570818
      Ylivieska
      11
      2243
    10. Suudeltiin unessa viime yönä

      Oltiin jossain rannalla jonkun avolava auton lavalla, jossa oli patja ja peitto. Uni päättyi, kun kömmit viereeni tähtit
      Ikävä
      21
      1860
    Aihe