Avatar billede starfish Nybegynder
13. december 2001 - 01:01 Der er 8 kommentarer og
1 løsning

Abstracte klasser og nedarvning

hejsa.
Jeg har flg. klasser

KundeContainer
public class KundeContainer {
    private LinkedList liste;

    public void tilføjKunde(Kunde kunde) {
        liste.addLast(kunde);
    }
}


Og en KunderADT
public abstract class KunderADT extends KundeContainer implements Kundecontainer {
}


Og en konkret implementation af kunderADT:
public class KunderDB extends KunderADT implements Kundecontainer {
public void tilføjKunde(Kunde kunde) {
    if (connection!=null) {
    // en masse db halløj
    }
    // her skal kunde tilføjes til den liste der findes.

    tilføjKunde(kunde);
    eller super.tilføjKunde(?!?);
    eller hvad?
}
}
}


Mit problem er at jeg ikke er sikker på hvilken tilføj kunde der kalde. Jeg skal både skrive i databasen og kalde den original tilføjKunde der findes på KundeContainer.

Hvordan skal det gøres?

Avatar billede logical Nybegynder
13. december 2001 - 01:04 #1
public class KundeContainer {
    private LinkedList liste;

    public void tilføjKunde(Kunde kunde) {
        liste.addLast(kunde);
    }
}

public abstract class KunderADT extends KundeContainer {}

public class KunderDB extends KunderADT {
public void tilføjKunde(Kunde kunde) {
    if (connection!=null) {
    // en masse db halløj
    }
    // her skal kunde tilføjes til den liste der findes.

super.tilføjKunde(kunde);

}
}
}
Avatar billede greybeard Nybegynder
13. december 2001 - 01:07 #2
Du har overrided tilføjKunde med dit DBhalløj,
Så hvis du vil have kunde i listen må det blive
super.tilføjKunde(kunde);

ellers får du jo også en uendelig rekursion
Avatar billede starfish Nybegynder
13. december 2001 - 01:10 #3
den skriver så:

\"cannot directly invoke abstract method filføjKunde() for type databasef.KunderADT with arguments(kunder.kunde)\"
Avatar billede starfish Nybegynder
13. december 2001 - 01:11 #4
filføj = tilføj. *stavefejl er gratis*
Avatar billede greybeard Nybegynder
13. december 2001 - 01:14 #5
Hvad er formålet med den specielle konstruktion ?

public abstract class KunderADT extends KundeContainer implements Kundecontainer
Avatar billede starfish Nybegynder
13. december 2001 - 01:27 #6
Grunden til det er at jeg har et GUI der tager en container med i constructoren. Denne container skal gerne være så generel som muligt, så jeg bare kan nedarve fra den, uden at skulle ændre i programkoden.

KunderDB, KunderFIL, KunderHulstrimmel etc.
Kundercontainer og KundeContainer er også uheldigt valgte navne.

interfacet (Kundecontainer med lille \'c\')indeholder nogle metoder der bl.a. skal kunen håndtere at hente data ind fra datakilden, gemme dem igen, søge i datakilden. etc.

selve klassen (KundeContainer med stort \'C\') pakker sådant set bare en ArrayList pænt ind, så man ikke ser at det er en ArrayList.
Avatar billede starfish Nybegynder
13. december 2001 - 01:30 #7
Har klaret det. Det var fordi jeg havde erklæret KunderADT.tilføjKunde som abstract.
Avatar billede greybeard Nybegynder
13. december 2001 - 01:36 #8
Hvis du vil beholde den konstruktion du har, er du nok nødt til at implementere
public void tilføjKunde(Kunde kunde) {
    super.tilføjKunde(kunde);
}

i kunderADT.

du kan prøve med super.super.tilføjKunde(kunde);

men jeg er ikke sikker på om det virker.
Avatar billede starfish Nybegynder
13. december 2001 - 01:45 #9
Har faktisk prøvet med super.super, men det gik ikke. Så jeg implementerede den metode i min ADT.
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