Java: abstrakti luokka

Abstraktin luokan käyttö tulee kyseeseen, kun halutaan luoda yleiskäyttöinen luokka, jonka kaikkia metodeja ei toteuteta vaan ne jätetään hoidettavaksi aliluokissa. Määreellä abstract voidaan luoda sekä abstrakti luokka, että myös metodi. Abstraktin metodin tapauksessa itse metodia ei kirjoiteta vaan määrittely päätetään puolipisteellä. Abstrakti luokka voi myös toteuttaa kaikki metodinsa, tästä huolimatta siitä ei voida suoraan luoda ilmentymiä.

// Luodaan abstrakti luokka ja abstrakti metodi
public abstract class AbstraktiLuokka {
   public abstract String abstraktiMetodi();
}

Esimerkissä on abstrakti luokka Kontakti, joka sisältää konstruktorin sekä metodit String getNimi() ja String getYhteys(). Lisäksi siinä määritellään abstrakti metodi void lahetaViesti(String); jonka toteutus jätetään aliluokkien hoidettavaksi.

Aliluokka joka perii abstraktin luokan saa käyttöönsä kaikki yliluokkansa valmiit metodit joilla on joko protected tai public määrittely. Lisäksi aliluokan pitää toteuttaa (eli implementoida) yliluokkansa abstraktit metodit.

Tässä tapauksessa on luotu luokat SmsKontakti ja EmailKontakti. Valmiissa ohjelmassa, ne lähettäisivät viestejä joko sähköpostitse tai tekstiviestillä. Nyt ne tulostavat viestin näytölle ja SmsKontaktin tapauksessa se myös puuttuu viestin pituuteen.

// Toteutetaan Kontakti luokan abstrakti metodi.
public void lahetaViesti(String viesti) {
 if(viesti.length() > 160 ) {
  viesti = viesti.substring(0, 159);
 }
 System.out.println("
  Lähetetään tekstiviestiä henkilölle: " + 
  this.nimi + " numeroon: '" + this.yhteys +
  "'\nViesti: " + viesti);
}

Luokka SmsKontakti sisältää myös metodit void setPuhelin(String) ja String getPuhelin(). Tähän luokkaan voidaan viitata Kontaktina.

Kontakti[] omatKontaktit = new Kontakti[5];
omatKontaktit[0] = new SmsKontakti("Aku Ankka", "040123456");
omatKontaktit[1] = new EmailKontakti("Roope Setä", "roope.seta@gmail.com");

Ylläolevassa tapauksessa abstraktin luokan Kontakti metodit void lahetaViesti(String), String getNimi() ja String getYhteys() ovat taulukon jokaisen jäsenen käytettävissä. Jos haluamme käyttää SmsLuokkaan kuuluvan olion metodeja void setLuuri(string) tai String getPuhelin() pitää meidän määritellä viittaus oikein.

// tarvitaan tyyppimuunnos
SmsKontakti temp = (SmsKontakti) omatKontaktit[0];
temp.setPuhelin("Nokia 101");
System.out.println(temp.getPuhelin());

Esimerkkinä käyttämäni ohjelman voit ladata pakattuna eclipse-projektina viereisestä linkistä. AbstractEsimerkki.zip

Vastaa

Täytä tietosi alle tai klikkaa kuvaketta kirjautuaksesi sisään:

WordPress.com-logo

Olet kommentoimassa WordPress.com -tilin nimissä. Log Out / Muuta )

Twitter-kuva

Olet kommentoimassa Twitter -tilin nimissä. Log Out / Muuta )

Facebook-kuva

Olet kommentoimassa Facebook -tilin nimissä. Log Out / Muuta )

Google+ photo

Olet kommentoimassa Google+ -tilin nimissä. Log Out / Muuta )

Muodostetaan yhteyttä palveluun %s

WordPress.com.

Ylös ↑