17. juni 2013 - 21:35Der er
14 kommentarer og 1 løsning
Hvorfor bruge interfaces i java
Jeg er meget i tvivl om hvorfor man bruger interfaces. Hvad er det smarte ved dem?
SÅ vidt jeg har forstået, deklarerer de bare nogle metoder der skal bruges. De implementeres først af den klasse der implementere interfacen.. Så jeg kunne gøre præcis det samme uden at bruge/implentere en interface. Interfacen kræver endda at man implementerer alle dens metoder hvis man vil bruge den.. hvorfor?
Har prøvet at lave et lille kode eksempel her, men kan stadig ikke få det til at give mening:
Interface: public interface InterfaceTest { public void setSize(int size); public int getSize(); }
Klasse der implementerer interface: public class TestInterface1 implements InterfaceTest {
int size = 0;
public void setSize(int size) { this.size = size; }
public int getSize() { return this.size; }
}
Main klasse:
public class MainInterfaces {
public static void main(String[] args) { TestInterface1 testInterface1 = new TestInterface1(); testInterface1.setSize(222); System.out.println(testInterface1.getSize()); }
}
Så jeg kunne jo tydeligvis bare droppe min interface og stadig få samme resultat.. Forstår virkelig ikke hvad pointen er.
Formaalet er at afkoble interface og implementation.
Naar du bruger InterfaceTest opererer du paa "et eller andet som implementerer interface InterfaceTest" og du kan bruge den kode med forskellige implementationer.
Og det bliver rigtigt interessant, hvis det er en udvikler som definerer interfacet og noget kode som opererer paa det, mens det er en anden udvikler som laver den implementerende klasse og kalder den foerste udviklers kode.
Nu ved jeg ikke om det bare er mig der er tungnem her, men hvordan kan en interface sørge for at man ikke skal rette så mange steder? Det eneste en interface gør, er jo at deklarerer metoder, som alle sammen skal implementeres af den klasse der implementere interfacen
public class MainInterfaces { public static void foo(InterfaceTest o) { o.setSize(222); } public static void bar(InterfaceTest o) { System.out.println(o.getSize()); } public static void main(String[] args) { InterfaceTest o = new TestInterface1(); foo(o); bar(o); } }
ved at rette:
new TestInterface1()
til:
new TestInterface2()
saa bruger du en anden implementation fordi alle de andre steder bruger du InterfaceTest.
okay forstår godt de eksempel efter at have kigget lidt på det.. men hvordan kan det være nyttigt at skifte til en anden implementation? Hvorfor skulle man gøre det ?
Hvordan ville du egentlig definere en interface ? tror det ville hjælpe mig til at forstå det bedre.
Lad os sige, du vil lave et gui til et antal videoafspillere. Så laver du et interface med de metoder, som de skal have tilfælles ... play, pause, spol, stop, etc.
Nu kan du tilgå x antal implementationer via et enkelt interface.
Hvis du skal teste et modul, som benytter InterfaceTest, men ikke ønsker at kalde den faktiske kode (fordi den f.eks. opdaterer databasen, eller kalder EJB eller andet, som ikke er praktisk under en unit-test).
I dette tilfælde kan du give dit modul en mock/test udgave af samme interface, som blot returnerer nogle mere eller mindre statiske data.
Generelt bruges interfaces til afkobling mellem forskellige kodedele.
Funderede også lidt over noget andet: En interface er en abstract klasse ikke (har jeg i hvert fald læst)? Hvis ja, hvad betyder det sådan helt præcist ?
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.