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