Avatar billede data2k.dk Nybegynder
09. november 2004 - 12:33 Der er 13 kommentarer og
1 løsning

Arv.. og referencer

Hejsa!

Jeg er blevet lidt forvirret angående arv og reference.. I får lige det eksempel min bog kommer med.

Det vil sige noget med assignements

Mammal pet;
Horse secretariat = new Horse();
pet = secretariat;

--
og

Animal creature = new Horse();


Hvad er det de mener?
Avatar billede kalp Novice
09. november 2004 - 12:36 #1
pet er en reference til et Mammal objekt
der bliver oprettet et Horse objekt... som hedder secretariat
da en hest er et dyr... så kan pet sagtens refere til en hest!


Ligesom et dyr sagtens kan være en hest.. som der står nederst.
Avatar billede data2k.dk Nybegynder
09. november 2004 - 12:37 #2
Kan andre prøve at forklare mig det også?
Avatar billede arne_v Ekspert
09. november 2004 - 12:43 #3
Hvis

class B extends A {

så kan du både:

B b = new B();

og

A a = new B();

fordi når B arver fra A så vil den altid have alle de metoder som A har og derfor
kan man betragte den som en A.

Og det passer meget godt med "is a" reglen for arv !

Tilsvarende kan man også:

class Y implements X {

Y y = new Y();
X x = new Y();

fordi igen så har Y alle metoder i X og kan derfor bruges som en  X.
Avatar billede data2k.dk Nybegynder
09. november 2004 - 12:48 #4
så hvis der var en C.. så ville den ikke kunne være = A fordi C ikke har B's nye metoder?
Avatar billede data2k.dk Nybegynder
09. november 2004 - 12:49 #5
når a arver fra b får den nye metoder med forhåbentlig..
Avatar billede arne_v Ekspert
09. november 2004 - 12:55 #6
12:48:30>

forstår jeg ikke

12:49:04>

Faktisk er det tit sådan at når A arver fra B så er de metoder der er implementeret
i A ikke nogen som skal kaldes fra den eksterne kode men nogle metoder som er
erklæret abstrakte i B og bruges i den øvrige kode i B.
Avatar billede data2k.dk Nybegynder
09. november 2004 - 13:04 #7
det helt i orden vil lade spørgsmålet stå åbent lidt endnu.. kan være andre har en anden måde at forklare det på: ) selv om det hjalp lidt begge jeres forklaringer
Avatar billede data2k.dk Nybegynder
09. november 2004 - 13:12 #8
ved godt hvorfor jeg er lidt forvirret nu...
Jeg har forstået det på denne måde.. at man arver fra noget for at få dets metoder så man slipper for at skulle skrive dem en gang til .. korrekt?

forstår jeg ikke at når B arver fra A at man kan lave sådan en
A a = new B();

lave et A objekt som har en reference til et B ojekt..

B har vel fået nogen nye metoder som A ikke har...


Mit hoved synes det her er logisk

B b = new A();

for B har i hvertfald alle A's metoder! den arver dem jo!
Avatar billede arne_v Ekspert
09. november 2004 - 13:17 #9
Du kan:

A a = new B();

fordi B har de samme eller flere metoder end A d.v.s. uanset hvad man kalder på
a så er metoden der

Du kan ikke:

B b = new A();

fordi gabnske vist har B alle metoder fra A men derudover kan den også have
nogle flere. Og de eksisterer jo ikke i b når b faktisk er en A.
Avatar billede arne_v Ekspert
09. november 2004 - 13:18 #10
Du kan godt sætte dig ind på forsædet af en 4 dørs bil selvom du tror at
det er en 2 dørs.

Men hvis du forsøger at sætte dig ind på bagsædet af en 2 dørs bil som du tror
er en 4 dørs bil, så får du et problem.
Avatar billede data2k.dk Nybegynder
09. november 2004 - 15:32 #11
Dvs. børn kan ikke holde en reference til en forældre men en forældre kan godt til et barn?

så hvis vi havde en C'er med ville den godt kunne ville den ikke kunne holde på en reference til hverken A eller B ?

Dvs de her ville være gyldige

A a = new C();
B b = new C();

men ikke

C c = new B();
C c = new A();

?
Avatar billede kalp Novice
09. november 2004 - 15:39 #12
Set på en anden måde..
a tallet er SuperKlassen!


j
i
h
g
f
e
d
c
b
a - > a kan holde en reference til alle den børn!

dvs.


A a = new A();//Gyldig!
A a = new b();//Gyldig!
A a = new c();//Gyldig!
A a = new d();//Gyldig!

osv er gyldigt!

j
i
h
g
f
e
d
c
b - > b kan holde en reference til alle den børn!
a

dvs
B b = new A(); //ER IKKE GYLDIG!! Da A ikke er dens barn! men forældre!
B b = new c(); //Gyldig!
B b = new d(); //Gyldig!
B b = new e(); //Gyldig!


en sidste!

j
i
h
g
f
e
d
c - > c kan holde en reference til alle den børn!
b
a


dvs
C c = new A(); //ER IKKE GYLDIG!! Da A ikke er dens barn! A er SuperKlassen!
C c = new b(); //ER IKKE GYLDIG!! Da B ikke er dens barn! men forældre!
C c = new c(); //Gyldig!
C c = new d(); //Gyldig!
C c = new e(); //Gyldig!


håber den er feset ind nu: )
Avatar billede kalp Novice
09. november 2004 - 15:40 #13
a tallet er SuperKlassen! = a bogstavet er SuperKlassen!
Avatar billede data2k.dk Nybegynder
09. november 2004 - 15:42 #14
Det er det den skal... forklares på baby sprog:o) hehe

takker!

og selvfølgelig kan de også holde en reference til sig selv... i b'eren glemmer du lige den.. men nok en fejl for du husker den i c'eren..
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