Avatar billede mickey777 Nybegynder
06. maj 2001 - 11:41 Der er 2 kommentarer og
4 løsninger

Arv, abstrakte klasser og interfaces

Hvad er arv idet hele taget ?

Jeg ved at abstracte klasser anvendes ved enkel arv, mens interfaces ved multiple arv.

Men hvordan fungere disse abstracte klasser og interfaces ?

Er deres syntaks forskellig fra hinanden og i så fald hvordan ser det ud ?

Skal metoderne i eksempelvis abstracte klasser og interfaces være fuldt ud defineret ?

På forhånd tak
Avatar billede logical Nybegynder
06. maj 2001 - 11:56 #1
For at hjælpe dig på vej kan jeg anbefale følgende

http://java.sun.com/docs/books/tutorial/java/concepts/index.html
Avatar billede thomaz Nybegynder
06. maj 2001 - 17:47 #2
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 :-)
Avatar billede delbing Nybegynder
06. maj 2001 - 20:54 #3
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).
Avatar billede trolle Nybegynder
07. maj 2001 - 00:06 #4
interface inter{  ... }
abstract class abs { ... }

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)
Avatar billede trolle Nybegynder
07. maj 2001 - 00:15 #5
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!
Avatar billede delbing Nybegynder
07. maj 2001 - 00:22 #6
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.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester