pruefungsvorbereitung - folie 10
Results 1 to 3 of 3
  1. #1

    Title
    Master
    Join Date
    Apr 2002
    Posts
    140
    Thanks
    0
    Thanked 1 Time in 1 Post

    Question pruefungsvorbereitung - folie 10

    hätte da eine frage zur folie 10:

    da hatten wir eine Klasse A als Basisklasse und Klasse B als abgeleitete Klasse von A.

    die zuweisungen lauteten

    A a1 = new A();
    B b1 = new B();
    A a2 = b1; -> was passiert hier jetzt wirklich ?

    meine vermutung: es wird ja nie eine instanz von A erstellt und a2 zugewiesen. heißt das jetzt, dass das objekt a2 durch die zuweisung auf B gecastet wird, und hier a2 nur eine kopie von b1 zugewiesen wird ??

    habe auch zusätzlich eine erklärung für den ausdruck ((A)b1).a(3);
    wenn nämlich eine abgeleitete klasse auf die basisklasse gecastet wird, dann bleiben die methoden der abgeleiteten klasse trotzdem noch erhalten. dadurch kommt die überschriebene methode a von der klasse B zum tragen und nicht irrtümlich geglaubter weise die von der klasse A.

    wär über antwort zum oben genannten problem dankbar.

    hochachtungsvoll,
    jessi

  2. #2

    Title
    Principal
    Join Date
    May 2002
    Posts
    48
    Thanks
    0
    Thanked 0 Times in 0 Posts
    hallo!

    A a2 = b1; -> was passiert hier jetzt wirklich ?
    meine vermutung: es wird ja nie eine instanz von A erstellt und a2 zugewiesen. heißt das jetzt, dass das objekt a2 durch die zuweisung auf B gecastet wird, und hier a2 nur eine kopie von b1 zugewiesen wird ??
    meiner meinung nach passiert folgendes:

    es wird einfach mal eine typvariable vom typ A namens a2
    erzeugt. Man könnte auch schreiben:

    A a2;

    logischerweise liegt noch kein objekt vor. Diese Typvariable
    kann natürlich auch objekte von der unterklasse b speichern.

    Nun weist man einfach der variable a2 den wert von b1 zu,
    welche ein objekt vom typ b referenziert.
    ergebnis: a2 referenziert nun auf das gleiche objekt wie b1.

    übrigens: der ausdruck

    ((A)b1).a(3); hat mich auch sehr "fasziniert". Mittlerweile
    ist mir schon klar dass die methoden der subklasse erhalten
    bleiben, aber wieso? was bringt dann der cast?

    und bei instanzvariablen verhält es sich aber genau anders,
    nämlich so wie man eigentlich vermutet, oder? (nämlich
    "cast"-gemäß)

    weiß wer wo das gut beschrieben ist (link?) den der horton
    ist zwar sehr umfangreich aber diese kleinen details waren
    dort nicht zu finden.

  3. #3
    bla's Avatar
    Title
    Master
    Join Date
    Jun 2002
    Posts
    174
    Thanks
    0
    Thanked 0 Times in 0 Posts
    was bringt dann der cast?
    damit ist es möglich mehrere klassen auf "einen nenner" zu bringen. bei nem vector braucht man das zb weil der vector objekte speichert. du weißt das in dem vector nur klassen sind die alle von einer oberklasse was geerbt haben also alle 1 funktion haben die du verwenden willst. du kannst dem compiler aber nicht sagen was genau für ein typ drinnen ist, also kannst du keinen cast auf die unterklasse machen. deswegen castest du auf die oberklasse und du kannst auf die funktion ohne probs zugreifen.

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •