Lige en kommentar så arver man ikke et interface man implementere det. Grunden til at man har abstrakte klasser er at de udtrykker noget generelt. Når du implementerer et interface skal du huske at de metoder der forefindes i interface skal implementeres i den klasse der implementerer interface. Dvs. hvis du har en metode i interface som returnerer en String skal metoden i klassen også returnerer en String. Desværre understøtter Java ikke multibel arv(øv, øv). dvs du kan kun bruge extend 1 gang i en klasse.
Hvis du vil har lidt mere materiale har jeg noget materiale på dansk med source koder jeg kan sende til dig :-)
interfaces angiver ingen implementation, altså blot metodesignaturer, ikke deres indhold
En klasse der implementerer et interface skal understøtte alle metoder angivet i interfacet
En abstract klasse er præcis som en almindelige klasse, bortset fra at der ikke kan oprettes instanser af den. Dvs. at man er nødt til at extende den (altså nedarve) for at kunne få en klasse man _kan_ instantiere - men en abstract class implementerer sine metoder og denne implementation arves af subclasserne såfremt de ikke overrides (og kan i alle tilfælde tilgås ved at kalde metoderne på super).
class ImpAfInterface implements inter { ... } class UdvidelseAfAbs extends abs { ... } class AltSammen extends abs implements inter { ... }
interfaces bruger man til bestemme noget generalt en gruppe af classer skal have. f.eks. har man i en metode brug for inputet er et pattedyr. Man laver saa flere forskellige classer: Hund,Kat,Giraf osv... men de kan ikke puttes ind i metoden, da man i den skal specificere hvad input er: public void killAnimal(Hund h); altsaa skal man lave en metode til alle typer dyr!!! (stort arbejde)
Det redes ved interfaces... man laver: interface pattedyr { ... }
og metoden skrives: public void killAnimal(pattedyr p){ ... }
i classerne Hund,Kat osv... skriver man saa: class Hund implements pattedyr { ... } fordi saa kan det godt komme med i metoden som et pattedyr!!!! (SKIDE SMART)
interface pattedyr { public void givLyd(); public void hop(); public void staaPaaHovedet(); public void skiftFarve(); }
abstract class pattedyr{ public absract void givLyd(); public absract void hop(); public absract void staaPaaHovedet(); public void skiftFarve(){ System.out.print(\"hvad fanden snakker du om\"); } }
som det kan ses saa i et interface saa maa INGEN metoder beskrives.... altsaa er det frit for ham der implementere den, hvordan han vil goere! hvorimod i en absract class, saa er noget bestemt i forvejen og andet er ikke!!! Det saetter begraensninger til ham der extender den, hvordan han vil goere. Fordi nogle af metodernes indhold forudbestemt!
Det sætter da kun begrænsninger hvis metoderne er erklæret final. Ellers kan man override dem og de er dermed ikke forudbestemte. Hvis man gerne vil bruge de eventuelle implementationer er man ved nedarvning så heldigt stille at man har muligheden for bare at benytte sig af den. I visse sprog er det som ud siger, men ikke i Java.
Synes godt om
Ny brugerNybegynder
Din løsning...
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.