/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Arv på den "rigtige" måde?
Fra : Flare


Dato : 28-01-03 17:07

Hejsa jeg har ikke et problem men mere et spørgsmål mht. arv.

Jeg har fx.

public class Ship{
int x;
int y;
Ship (int y, int x){
this.x = x;
this.y = y;
}
}
public class BigBoat extends Ship {
int weight;
BigBoat(int x, int y, int w)
{
// Her kommer så spørgsmålet. hvordan får jeg inititaliseret
// Ship på en "rigtige" og gængse måde?
}
}

Jeg har selv 2 bud.

BigBoat(int x, int y, int w) {
weight = w;
super.x = x;
super.y = y;
}
ELLER

BigBoat(int x, int y, int w) {
weight = w;
super(x,y);
}

Dvs jeg kalder ikke super constructoren i den første måde. Skal jeg det?
Eller er der en 3 måde at gøre det på?

Håber nogen kan hjælpe
Anders












 
 
Kenneth Egholm (28-01-2003)
Kommentar
Fra : Kenneth Egholm


Dato : 28-01-03 17:14

"Flare" <dct_flare@hotmail.com> wrote in message
news:3e36aaaa$0$149$edfadb0f@dread14.news.tele.dk...
> Hejsa jeg har ikke et problem men mere et spørgsmål mht. arv.
>
<SNIP kode>

> ELLER
>
> BigBoat(int x, int y, int w) {
> weight = w;
> super(x,y);
> }
>
> Dvs jeg kalder ikke super constructoren i den første måde. Skal jeg
det?
> Eller er der en 3 måde at gøre det på?

Den sidste måde (herover) er helt rigtig..

MVH Kenneth Egholm



Lars Dam (28-01-2003)
Kommentar
Fra : Lars Dam


Dato : 28-01-03 17:23

On Tue, 28 Jan 2003 17:07:06 +0100
"Flare" <dct_flare@hotmail.com> wrote:

> Hejsa jeg har ikke et problem men mere et spørgsmål mht. arv.
>
>
> BigBoat(int x, int y, int w) {
> weight = w;
> super(x,y);
> }
>
> Dvs jeg kalder ikke super constructoren i den første måde. Skal jeg det?
> Eller er der en 3 måde at gøre det på?

Gør det på den sidste måde.

1) Det kan jo være at superklassen initialiserer mere end blot de to variabler du har
2) Du fjerner en binding mellem sub klassen og super klassen (super klassen må nu ikke mere lave om på sin implementation af x og y fordi en sub klasse bruger det på den måde.

> Håber nogen kan hjælpe
> Anders

vh. ld

Flare (28-01-2003)
Kommentar
Fra : Flare


Dato : 28-01-03 17:28

> Gør det på den sidste måde.

Takker til jer begge to for de hurtige svar.
Synes også det var det mest logiske at gøre. Men for at være helt sikker :)

Anders



Michael Banzon (28-01-2003)
Kommentar
Fra : Michael Banzon


Dato : 28-01-03 17:35

"Flare" <dct_flare@hotmail.com> skrev i en meddelelse
news:3e36af96$0$224$edfadb0f@dread14.news.tele.dk...
> > Gør det på den sidste måde.
>
> Takker til jer begge to for de hurtige svar.
> Synes også det var det mest logiske at gøre. Men for at være helt sikker
:)
>
> Anders
>
>

Det kommer IKKE til at virke! Du skal kalde "super(...)" først, altså før
end at du laver noget andet...

/ Michael



Anders K. Olsen (28-01-2003)
Kommentar
Fra : Anders K. Olsen


Dato : 28-01-03 19:36

"Lars Dam" <larsdam___YeahNoUnderscores_____@______post2.tele.dk> skrev i en
meddelelse
news:20030128172234.6e5506b1.larsdam___YeahNoUnderscores_____@______post2.te
le.dk...
> On Tue, 28 Jan 2003 17:07:06 +0100
> "Flare" <dct_flare@hotmail.com> wrote:
>
> > Hejsa jeg har ikke et problem men mere et spørgsmål mht. arv.
> >
> >
> > BigBoat(int x, int y, int w) {
> > weight = w;
> > super(x,y);
> > }
> >
> > Dvs jeg kalder ikke super constructoren i den første måde. Skal jeg det?
> > Eller er der en 3 måde at gøre det på?
>
> Gør det på den sidste måde.
>
> 1) Det kan jo være at superklassen initialiserer mere end blot de to
variabler du har
> 2) Du fjerner en binding mellem sub klassen og super klassen (super
klassen må nu ikke mere lave om på sin implementation af x og y fordi en sub
klasse bruger det på den måde.

Og et tredje punkt:

3) Der skal ALTID kaldes en constructor på et objekt og det objekt det evt.
arver fra, når der skabes en instans. Hvis klassen har en constructor der
ikke tager argumenter (eller hvis den slet ikke har en constructor - default
constructor) kaldes denne automatisk. Ellers skal du kalde superklassens
constructor selv. Som Michael også skriver, så skal super(...) kaldes som
det første i subklassens constructor.

Dvs. hvis Ship kun har den ene constructor der tager to int argumenter, skal
den kaldes i enhver subklasses constructor.

/Anders



Flare (29-01-2003)
Kommentar
Fra : Flare


Dato : 29-01-03 13:43

> Dvs. hvis Ship kun har den ene constructor der tager to int argumenter,
skal
> den kaldes i enhver subklasses constructor.

OK. :)

Anders



Søg
Reklame
Statistik
Spørgsmål : 177492
Tips : 31966
Nyheder : 719565
Indlæg : 6408466
Brugere : 218886

Månedens bedste
Årets bedste
Sidste års bedste