Kurssisisältö
Java OOP
Java OOP
Mikä on rajapinta?
Entä jos meidän täytyy periä useammasta kuin yhdestä luokasta? Java mahdollistaa tämän rajapintojen avulla. Nimestään huolimatta rajapinta muistuttaa hyvin paljon abstraktia luokkaa. Tarkastellaanpa rajapinnan määrittelyä:
Yksinkertaisesti sanottuna rajapintaa käytetään määrittelemään metodit, jotka luokka toteuttaa. Rajapinnoilla on oma syntaksinsa. Kun loimme luokan, käytimme "public class className { }
", mutta rajapinnan luomisen syntaksi näyttää erilaiselta:
InterfaceExample.java
package com.example; public interface InterfaceExample { void methodName(); String methodThatAcceptsAndReturnsString(String parameter); }
Huomioi metodin määrittely;
Emme käytä pääsynmäärittelijöitä;
Emme anna metodirunkoja;
Ei tarvitse merkitä metodeja abstract-avainsanalla, koska työskentelemme rajapinnan sisällä;
Emme luo kenttiä rajapintoihin.
Tarkastellaan Interface
-rajapinnan käyttöä esimerkin avulla, jossa on mediasoitin.
Meillä on Interface
nimeltä MediaPlayer
, jossa on metodit play
, pause
ja stop
. Lisäksi on kaksi luokkaa, jotka toteuttavat tämän mediasoittimen rajapinnan: AudioPlayer
ja VideoPlayer
.
MediaPlayer.java
AudioPlayer.java
VideoPlayer.java
public interface MediaPlayer { void play(); void pause(); void stop(); }
Kuten huomaat, loimme interface
-rajapinnan ja kaksi luokkaa, jotka toteuttavat tämän rajapinnan. Syntaksi on sama kuin abstraktien metodien ylikirjoittamisessa. Olemme ylikirjoittaneet jokaisen metodin jokaiselle luokalle niin, että ne suorittavat oman erityisen toimintonsa.
Yksi rajapintojen ominaisuuksista on, että voimme toteuttaa useamman kuin yhden rajapinnan. Tarkastellaanpa esimerkkiä:
Vehicle.java
VehicleInfo.java
Car.java
package vehicle; interface Vehicle { void startEngine(); void stopEngine(); }
Olemme luoneet rajapinnat Vehicle
ja VehicleInfo
. Lisäksi olemme luoneet luokan Car
, joka toteuttaa molemmat nämä rajapinnat. Näin voimme valita mitkä toiminnot toteutetaan luokassa, mikä tukee hyvin olio-ohjelmoinnin periaatetta nimeltä abstraktio.
Rajapintojen kanssa työskentely on erittäin kätevää, ja niitä käytetään laajasti. Seuraavassa luvussa tarkastelemme myös rajapinnan ja abstraktin luokan pääasiallisia eroja sekä opimme, kumpaa kannattaa käyttää käytännössä!
1. Mikä on rajapinta (interface) Javassa?
2. Voiko luokka toteuttaa useita rajapintoja Javassa?
3. Mikä on rajapinnan tarkoitus Javassa?
4. Mitä avainsanaa käytetään rajapinnan toteuttamiseen luokassa?
5. Mitä tapahtuu, jos luokka väittää toteuttavansa rajapinnan, mutta ei tarjoa toteutuksia kaikille sen metodeille?
Kiitos palautteestasi!