Avatar billede tjalle Nybegynder
15. juni 2002 - 01:21 Der er 12 kommentarer og
1 løsning

Abstract og interface?

hejsa.

hvad betyder det at en klasse er abstract ?
hvad betyder det at en metode er abstract ?

Hvad betyder abtract i forhold til et interface ?

Hvor bruges abtract og interface (eksempler?)?

Tj.
Avatar billede birkis Nybegynder
15. juni 2002 - 01:33 #1
Jeg forsøger mig på nogle af dine spørgsmål:

En abstract klasse kan der ikke skabes objekter af.

En abstact klasse kan indeholde metoder med "krop", et interface kan kun indeholde metodernes "hode".

Abstract klasse bruges ofte (f.eks.) i forbindelse med nedarvning (extends) hvor man ikke ønsker objekter af superklassen.

Interface bruges (f.eks.) der man ønsker at klasser indeholder bestemte metoder - klassene som implements interface't må mindst ha de metoder der findes i interface't.
Avatar billede tjalle Nybegynder
15. juni 2002 - 01:43 #2
ok.. et eksempel.

En Kunde (som superklasse).
En privatkunde (værende en kunde med Dankortnummer)
En Erhvervskunde (med nulighed for kredit).

Hvis kunde (superklassen) var abstract ville man ikke kunne skabe et objekt af denne. Man skal med andre ord altid lave objekter af en af de 2 subklasser.

Hvis kunde indeholder en abtract metode kaldet "registrerVarekøb", som kan putte en vare på en kunde, vil begge subklasser kunne bruge den i superklassen beskrevne metode.

Hvis metoden ikke er abtract vil det kræves af hver af underklasserne at de selv specificerer metoden "registrerVarekøb".


Interfaces bruges med andre ord primært når man ønsker at styre hvilke krav der er til metoder på en subklasse?

Tj.
Avatar billede tjalle Nybegynder
15. juni 2002 - 02:08 #3
korrekt?
Avatar billede birkis Nybegynder
15. juni 2002 - 02:25 #4
Sorry - jeg var lige optaget...

Ja, det ser da korrekt ud, men jeg vil ikke garantere noget, da jeg ikke har 100% styr på teorien selv...  :-)
Avatar billede bearhugx Nybegynder
15. juni 2002 - 03:24 #5
Abstrakte klasser er klasser, som i sig selv ikke kan instantieres (laves objekter af). De bruges til at definere et abstrakt begreb gennem et minimum-sæt af metoder og attributter, som sub-klasser skal have.
Feks. kan man tage  //Kunde// med subklasserne ErhvervsKunde og PrivatKunde...
Begge kunne f.eks. have kundenummer, oprettelsesdato, samt metoder til at tilgå disse.

Interfaces definerer adfærd gennem et sæt af metoder/konstanter, som kan implementeres af en klasse, ligemeget, hvor denne er i klassehierakiet.

Tag f.eks. disse to begreber/klasser
- Game
- Guitar

Man kan ikke sige, at der er et nært abstrakt forhold mellem disse.
Guitar ville nok have supertypen "Instrument", mens Game ville have "Toy" el. lign.


Derimod kan man definere at de har fælles adfærd. Bemærk f.eks. dette interface

interface Playable {
  public void play();
}

Både Toy og Guitar har adfærden .play() (man kan både lege med et stykke lejetøj og spille på en guitar :-)

Sun betegner et interface således
"An interface defines a protocol of behavior that can be implemented by any class anywhere in the class hierarchy. An interface defines a set of methods but does not implement them. A class that implements the interface agrees to implement all the methods defined in the interface, thereby agreeing to certain behavior."

Fra http://java.sun.com/docs/books/tutorial/java/interpack/interfaceDef.html

Dvs.
Abstract bruges til at betegne et "fælles" ophav for klasser
hvorimod
Interface bruges til at betegne ens adfærd.

En anden detalje er, at man kun kan nedarve fra ét abstrakt begreb, men at man kan betegnes med flere slags adfærd(interfaces)

f.eks
public class Guitar extends Instrument implements Playable, Tuneable
{
  ...
}

Her har vi beskrevet at Guitar er en konkretisering af et Instrument, men at en Guitar også har adfærd, hvilket gør at man kan spille på den, samt at man kan stemme den....
(Måske nok ikke det bedste eksempel :-)

bare spørg, hvis jeg ikke har fået noget forklaret ordenligt :-)

/Søren
Avatar billede bearhugx Nybegynder
15. juni 2002 - 03:29 #6
I ovenstående har jeg kommet til at bytte "Game" med "Toy"... Der skulle stå :
"...Både Game og Guitar har adfærden .play()..."

/Søren Munk Skrøder
Avatar billede bearhugx Nybegynder
15. juni 2002 - 03:38 #7
Og læs her for forklaring omkring abstrakte klasser og metoder
http://java.sun.com/docs/books/tutorial/java/javaOO/abstract.html
Avatar billede bearhugx Nybegynder
15. juni 2002 - 03:38 #8
Og læs her for forklaring omkring abstrakte klasser og metoder
http://java.sun.com/docs/books/tutorial/java/javaOO/abstract.html
Avatar billede bearhugx Nybegynder
15. juni 2002 - 03:39 #9
hmm 2 gange ... *suk*
Avatar billede sago Nybegynder
18. juni 2002 - 00:16 #10
Og hvis man har lyst, kan man lave et objekt af klassen Game således:

Playable p = new Game();

Så kan du kun bruge de metoder der er i interfacet playable, på objektet p.

Så vidt jeg husker... :)
Avatar billede bearhugx Nybegynder
18. juni 2002 - 17:21 #11
sago >> Det er korrekt :-)

i det tilfælde kan du så kun bruge de metoder, som er defineret i interfacet Playable....
Men du kan altid caste om til Game igen
p = (Game)p;
hvis man har brug for specifikke Game-metoder/attributter

/Søren
Avatar billede bearhugx Nybegynder
19. juni 2002 - 02:48 #12
Er det svar nok, eller er der noget, som skal uddybes....
Avatar billede tjalle Nybegynder
25. august 2002 - 16:41 #13
hej igen..

Har vidst aldrig fået afsluttet dette spm, gør det nu !
tak for goe dialog..

Tj.
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