Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Frage zu Polymorphie/Vererbung...

Empfohlene Antworten

Veröffentlicht

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 :)!

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.

aha!

Ok, vielen Dank! Ich glaub, das kann ich mir merken!

Gruß&Dank

Chris

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.