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 erityinen syntaksinsa. Kun loimme luokan, käytimme "public class className { }", mutta rajapinnan luomisen syntaksi näyttää erilaiselta:
InterfaceExample.java
123456package com.example; public interface InterfaceExample { void methodName(); String methodThatAcceptsAndReturnsString(String parameter); }
- Kiinnitä huomiota metodin määrittelyyn;
- 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öä esimerkkinä mediasoittimesta.
Meillä on Interface nimeltä MediaPlayer, jossa on metodit play, pause ja stop. Lisäksi on kaksi luokkaa, jotka toteuttavat tämän mediasoitinrajapinnan, nimittäin AudioPlayer ja VideoPlayer.
MediaPlayer.java
AudioPlayer.java
VideoPlayer.java
12345public 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 jokaisessa luokassa niin, että ne suorittavat oman erityisen toimintonsa.
Yksi rajapintojen ominaisuuksista on, että voimme toteuttaa useamman kuin yhden rajapinnan. Tarkastellaan esimerkkiä:
Vehicle.java
VehicleInfo.java
Car.java
123456package 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 mitä toiminnallisuuksia luokassa toteutetaan, mikä tukee hyvin olio-ohjelmoinnin abstraktion periaatetta.
Rajapintojen kanssa työskentely on erittäin kätevää, ja niitä käytetään laajasti. Seuraavassa luvussa tarkastelemme myös rajapinnan ja abstraktin luokan tärkeimpiä 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!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Can you show me an example of how to declare an interface in Java?
What is the difference between an interface and an abstract class?
How do you implement multiple interfaces in a single class?
Awesome!
Completion rate improved to 4.76
Mikä on rajapinta?
Pyyhkäise näyttääksesi valikon
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 erityinen syntaksinsa. Kun loimme luokan, käytimme "public class className { }", mutta rajapinnan luomisen syntaksi näyttää erilaiselta:
InterfaceExample.java
123456package com.example; public interface InterfaceExample { void methodName(); String methodThatAcceptsAndReturnsString(String parameter); }
- Kiinnitä huomiota metodin määrittelyyn;
- 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öä esimerkkinä mediasoittimesta.
Meillä on Interface nimeltä MediaPlayer, jossa on metodit play, pause ja stop. Lisäksi on kaksi luokkaa, jotka toteuttavat tämän mediasoitinrajapinnan, nimittäin AudioPlayer ja VideoPlayer.
MediaPlayer.java
AudioPlayer.java
VideoPlayer.java
12345public 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 jokaisessa luokassa niin, että ne suorittavat oman erityisen toimintonsa.
Yksi rajapintojen ominaisuuksista on, että voimme toteuttaa useamman kuin yhden rajapinnan. Tarkastellaan esimerkkiä:
Vehicle.java
VehicleInfo.java
Car.java
123456package 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 mitä toiminnallisuuksia luokassa toteutetaan, mikä tukee hyvin olio-ohjelmoinnin abstraktion periaatetta.
Rajapintojen kanssa työskentely on erittäin kätevää, ja niitä käytetään laajasti. Seuraavassa luvussa tarkastelemme myös rajapinnan ja abstraktin luokan tärkeimpiä 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!