10. september 2005 - 20:54
Der er
10 kommentarer
Initialisering af felter og variable
Hej eksperter Jeg roder med initialisering af fields og variable, og er nået til et punkt, hvor jeres hjælp er nødvendig Jeg arbejder med følgende klasser: // class AAA public class AAA { private String a = "Hello"; private String b; private int x = 17; public AAA(String s){ b = s; } public AAA(){ b ="Goodbye"; } } // class BBB public class BBB extends AAA{ private String c = "Go'dag"; public BBB(){ super(null); c = "Davs"; } } // class InitializeOrder public class InitializeOrder { public static void main(String[] args){ AAA a = new BBB(); } } I BBB's konstruktør er det muligt at foretage kaldet til parent-klassens konstruktør med argumentet super(null); Mit spørgsmål går på, hvorfor det ikke er muligt at udskifte parameteren så den kommer til at se ud som følger: super(c); . Forud for kald til parent-klassens konstruktør, er c blevet initialiseret til standarværdien null. Hvorfor kan kaldet så ikke lade sig gøre?
Annonceindlæg tema
Forsvar & beredskab
Cybersikkerhed, realtidsdata og robuste it-systemer er blevet fundamentet for moderne forsvar.
10. september 2005 - 21:09
#1
Der er simpelthen en regel som siger: Kald af constructor i superklasse SKAL være første linie i subklasses constructor - derfor
10. september 2005 - 21:13
#2
Det er nu mere fordi: cannot reference c before supertype constructor has been called Altså det objekt man er i oprettes ikke før super-klassen er blevet oprettet, og derfor "eksisterer" slet ikke på det tidspunkt.
10. september 2005 - 21:14
#3
...derfor "eksisterer" c slet ikke på det tidspunkt.
10. september 2005 - 21:15
#4
Og så er det egentlig forkert af mig og skrive "første linie", det rigtige svar er "første statement"
10. september 2005 - 21:16
#5
Men det mest rigtige er erikjacobsen's kommentar !!!
10. september 2005 - 21:19
#6
Det kan måske bedst illustreres ved at sige at dette er lovligt - bemærk brug af static: class BBB extends AAA{ private static String c = "Go'dag"; public BBB(){ super(c); c = "Davs"; } }
10. september 2005 - 23:24
#7
Hej begge to Tak for jeres svar. eric, vil det sige, at det først er når subklassens konstruktør er eksekveret, at subobjektet oprettes og der afsættes memory til dette? Læg gerne et svar mvh/ dresen
10. september 2005 - 23:29
#8
Ingen point til mig, tak. Jeg tror ikke vi behøver at tænke på hvordan det rent fysisk sker i maskinen. Derfor skriver jeg også: "eksisterer". Størrelsen af objektet kendes når du siger new, men rækkefølgen af constructors skal være top-down.
10. september 2005 - 23:56
#9
hej erik hvis du ikke vil have point, så er det ihf. på plads at sige MANGE TAK!!! Hvis du skulle fortryde lader jeg spørgsmålet stå åbent noget tid endnu. I denne periode er carsten velkommen til at byde ind. I må have en god weekend!
11. september 2005 - 00:03
#10
på plads = på sin plads :)
Kurser inden for grundlæggende programmering