Linux - Friheden til at programmere i Java: Version 0.7.20040516 - 2020-12-31 | ||
---|---|---|
forrige | Kapitel 12. Interfaces - grænseflader til objekter | næste |
Lad os nu definere en klasse, der implementerer Tegnbar-interfacet.
En klasse kan erklære, at den implementerer et interface, og så skal den definere alle metoderne i interfacet og give dem en metodekrop
Vi skal altså definere alle interfacets metoder sammen med programkoden, der beskriver hvad der skal ske, når metoderne kaldes.
import java.awt.*; public class Stjerne implements Tegnbar { private int posX, posY; public void sætPosition(int x, int y) // kræves af Tegnbar { posX = x; posY = y; } public void tegn(Graphics g) // kræves af Tegnbar { g.drawString("*",posX,posY); } }
Her har klassen Stjerne "udfyldt skallen" for Tegnbar ved at skrive "implements Tegnbar" og definere sætPosition()- og tegn()-metoderne (vi har også variabler til at huske x og y).
Man kan erklære variabler af en interface-type. Disse kan referere til alle slags objekter, der implementerer interfacet. Herunder erklærer vi en variabel af type Tegnbar og sætter den til at referere til et Stjerne-objekt.
Tegnbar t;
t = new Stjerne(); // Lovligt, Stjerne implementerer Tegnbar
Stjerne-objekter er også af type Tegnbar. Ligesom ved nedarvning siger man, at der er relationen Stjerne er-en Tegnbar, og at t er polymorf, da den kan referere til alle slags Tegnbare objekter.
Man kan ikke oprette objekter ud fra et interface (der bare er en "skal" og intet siger om, hvordan metoderne er implementerede så hvordan skulle objektet reagere, hvis metoderne blev kaldt?).
t = new Tegnbar(); // FEJL! Tegnbar er ikke en klasse