Avatar billede flamsk Nybegynder
30. november 2005 - 21:55 Der er 4 kommentarer og
1 løsning

Constructor spørgsmål

Jeg har et problem.

class Parent
{
  public Parent(String txt)
  {
    System.out.println(txt);
  }
}

//Ikke lovligt
class Child extends Parent
{
  public Child(boolean fiskEllersHund)
  {
    if(fiskEllersHund)
        Super("Fisk");
    else
        Super("Hund");
  }
}

jeg har en klasse som arver fra en klassen Parent, constructoren i min child skal så kalde Parent constructoren med forskellig værdi alt efter hvordan et flag er sat "fiskEllersHund".

Men Super skal være den første linje, og der kan kun være et super kald.

Hvordan kan man løse en sådan opgave.

Jeg kunne jo bare lave følgende.

class Child extends Parent
{
  public Child(String fiskEllersHund)
  {
    Super(fiskEllersHund);
  }
}

men så skal jeg lave min streng "fisk" eller "hund" uden for klassen og kalde constructoren. jeg ville helst have at strengene bliver inden i klassen, og man bare bruger et flag, er der en workaround eller en anden måden man kan løse det på ?
Avatar billede erikjacobsen Ekspert
30. november 2005 - 22:05 #1
der er nok en grund til det er lavet sådan ...  Men en workaround er at lave en statisk funktion, og bruge den:

  public Child(boolean fiskEllersHund)
  {
        Super(dinstatiskefunktioN(fiskellerhund));
  }

men prøv at undgå det. Hvis du virkelig har brug for det, er det måske fordi du skal have 2 underklasser - en til fisk og een til hund.
Avatar billede arne_v Ekspert
30. november 2005 - 22:39 #2
Jeg er enig i de 2 klasser.

En statisk metode er en mulighed men i det konkrete tilfælde bør du kunne:

class Child extends Parent
{
  public Child(boolean fiskEllersHund)
  {
        Super(fiskEllersHund?"Fisk":"Hund");
  }
}
Avatar billede flamsk Nybegynder
30. november 2005 - 23:26 #3
det virkede begge to, så tak for hjælpen smid et svar så får i begge point
men må dog sige at arnes måde er mere elegant
Avatar billede arne_v Ekspert
30. november 2005 - 23:28 #4
til gengæld er den ikke så generel ...

og svar
Avatar billede erikjacobsen Ekspert
30. november 2005 - 23:47 #5
Jeg samler slet ikke på point, tak.
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