Zum Inhalt springen

Frage zu Polymorphie/Vererbung...


HansChrisLuk

Empfohlene Beiträge

Hallo,

ich beschäftige mich gerade mit Polymorphie/Vererbung und habe dazu ein paar Fragen. Ich habe ein kleines Programm geschrieben und verstehe leider nicht alle Ausgaben:


public class Vater {

  public int var=10;


  public void zeige() {

    System.out.println("Vater " + var);

  }

}




public class Sohn extends Vater{


  public int var = 2;

  public int var2 = 22;


  public void zeige() {

    System.out.println("Sohn " + var + " " + var2);

  }


 public static void main (String[] args){

    Vater vater_vater = new Vater();

    Sohn sohn_sohn = new Sohn();

    Vater vater_sohn = new Sohn();



    ((Vater)vater_sohn).zeige2();

    System.out.println(((Sohn)vater_sohn).var);

    System.out.println((vater_sohn).var);

    System.out.println(((Sohn)vater_sohn).var2);

  }
Ausgabe:

Sohn 2 22 

2

10

22

Die 1. Ausgabezeile versteh ich nicht, ich dachte, ich habe vater_sohn zu Vater gecastet? Aber wieso nimmt er dann doch die Methode von Sohn?

Wie kann ich das mit dynamischen und statischem Typ erklären?

Ich würde ja gern mal schreiben, wie ich es mir bisher vorgestellt hatte, vielleicht stimmt es ja:

Also in vater_sohn steht eine Referenz vom Typ Vater, auf ein Objekt vom Typ Sohn, ok, also kann vater_sohn alles, was auch Vater kann (sprich Methoden, welche aber überschrieben werden durch Sohn). Allerdings werden die Variablen nicht überschrieben, deshalb steht in dem Objekt, auf das vater_sohn zeigt der Wert für var=10 (die Methode wurde überschrieben)?

Stimmt das so weit?

Was passiert aber, wenn ich das jetzt caste?

Also für Hilfe bin ich dankbar :)!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ok, bei der vererbung, verhält sich das meiner meinung nach folgendermaßen.

Attribute von Klassen werden überlagert, das heißt, wenn du dein objekt vater_sohn zum Typ vater castest, werden auch deren attribute aufgerufen, und beim casten zum typ sohn halt die attribute vom typ sohn.

Methoden jedoch werden überschrieben, dies bedeutet, dass egal in welchen typ du dein objekt castest, immer die methode aufgerufen wird welche als letztes ne andere methode überschreibt.

die einzige möglichkeit ne vorherige methode aufzurufen, ist mit super().[Methodenname], darüber kannst du wieder eine stufe höher gehen, aber mehr auch nicht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...