Dynamisches und statisches binden

Status
Nicht offen für weitere Antworten.

Mariem

Mitglied
Hallo aller Seits,

Ich löse gerade deiner Aufgabe aber und mein Programm gibt mir Ausgaben die ich nicht verstehe ;( villeicht kann mir jemanden bei der verstandniss helfen: ich habe 3 klassen: myRunner, HighJumper und Athlete .
Die ersten beiden sind Unterklassen von der Klasse Athle
bei der Ausführung von folgende Commendozeilen:

Java:
        myAthlete = myRunner; // ueberlagerter Methoden: Welcher Methode wird verwendet:
        // die der Klasse des Objekts, nicht die der Klasse der Referenzvariablen
        System.out.println("11. myAthlete.activity    : " + myAthlete.activity);    // 11 dynamiches Binden
        System.out.println("12. myAthlete.training()  : " + myAthlete.training());  // 12 dynamisches Binden
        System.out.println("13. myAthlete.training2() : " + myAthlete.training2()); // 13 dynamisches Binden

        myAthlete = myHighJumper;
        System.out.println("14. myAthlete.activity    : " + myAthlete.activity);    // 14 dynamiches Binden
        System.out.println("15. myAthlete.training()  : " + myAthlete.training());  // 15 dynamiches Binden
        System.out.println("16. myAthlete.training2() : " + myAthlete.training2()); // 16 dynamiches Binden

bekomme ich folgende Audgaben:
Java:
11. myAthlete.activity    : I'm on exercise!
12. myAthlete.training()  : I'm on exercise!
13. myAthlete.training2() : I'm on exercise!
14. myAthlete.activity    : I'm on exercise!
15. myAthlete.training()  : I'm jumping high!
16. myAthlete.training2() : I'm jumping high!

Ich habe getippt dass alle ausgaben dynamisches binden sind, stimmt das? und wenn ja warum bekomme ich nicht die gleiche Ausgabe bei 15 und 16 als auch bei 12 und 13???:L

Ich bin sehr dankbar wenn ihr mir helfen könnt :)

hier noch einmal die Klassen:

Java:
public class Athlete {

    /** Attribute describing the activity of the athlete. */
    public String activity = "I'm on exercise!";

    /**
     * Returns the activity of the athlete.
     */
    public String training() {
        return activity;
    }

    /**
     * Also returns the activity of the athlete (by calling method training()).
     */
    public String training2() {
        return training();
    }
}

Java:
public class Runner extends Athlete {

    /** Attribute describing the activity of the runner. */
    public String activity = "I'm running!";

    /** 
     * Returns the activity of the runner by calling the method training2()
     * of the super class.
     */
    public String training2() {
        return super.training2();
    }
}

Java:
public class HighJumper extends Athlete {

    /** Attribute describing the activity of the high jumper. */
    public String activity = "I'm jumping high!";

    /** 
     * Returns the activity of the high jumper.
     */
    public String training() {
        return activity;
    }

    /** 
     * Returns the activity of the high jumper by calling the method training2()
     * of the super class.
     */
    public String training2() {
        return super.training2();
    }
}

Danke im vorraus
 

Oli

Top Contributor
myAthlete = myHighJumper;

damit "überschreibst" du myAthlethe. Nun ist myAthlete HighJumper. Der erbt von Athlete. Aber die überschriebenen Methoden werden ja aus HigJumper genommen, nicht aus Athlete.

Schau dir mal Verebung an.
 

Mariem

Mitglied
Danke Oli für deiner Schnelle Antwort du meinst das ich hier mit myAthlete = myHighJumper es überschreibe? aber ich überschreibe nur die Methoden und nicht das Attribut
14. myAthlete.activity : I'm on exercise! das bleibt statisches binden

Aber was ist mit den anderen???? myAthlete = myRunner;
warum habe ich es hier nicht überschrieben? und bekomme einer andere Ausgabe?
 

Oli

Top Contributor
Hi,

myRunner ist eine Instanz von Runner. Dort überschriebst du die Methode activity() und training() nicht. Deswegen erbt Runner die Methoden von Athlete.

myHighJumper ist vom Typ HighJumper. Dort überschriebst du diese Methode. Somit wird hier eben der String aus HighJumper zurückgegeben und nicht der aus Athlete.
 

Oli

Top Contributor
Sorry, hab mich verlesen... Man sollte sich halt doch die Zeit nehmen und genau durchlesen...

Nun schreib doch mal im Runner und in HighJumper @Override über die Methoden und schau was passiert.
 

Mariem

Mitglied
Es hat sich nichts geärndert, Ich bekomme die gleiche Ausgabe! Ich nenne die alle dynamisches binden oder?
 

Oli

Top Contributor
Äh, irgendwie verstehe ich die Frage nicht.

Was ist denn deiner Meinung nach statisches und dynamisches Binden??

Also ich hab mal gelernt, dass das beim dynamischen Binden nicht benötigte Klassen zur Laufzeit geladen werden - also dann wenn sie benötigt werden. Beim statischem Binden werden alle Klassen sofort geladen. Das hat aber nichts mit deinem Problem zu tun.

Und was für Ausgaben hättest du denn erwartet??

Grüße Oli
 

Mariem

Mitglied
ok du hast recht :)
Ich habe die Frage mit dynamisches und statisches Binden gestellt, weil ich mir nicht mehr sicher bin und mein Hiwie wird es mir in 30 minuten stellen :/ Ich soll raus finden was als dynamisch arbeitet und was nicht!
 

Oli

Top Contributor
Nun, die Frage kannst du dir selbst beantworten:

Schreibe diese beiden Zeilen nach deinen Sysouts:

System.out.println(myHighJumper.activity);
System.out.println(myAthlete.activity);

Dann versuch das zu interpretieren. Wenn du dann noch eine Frage hast, gerne...
 

Mariem

Mitglied
Ok, als Ausgabe habe ich
I'm jumping high!
I'm on exercise!
Ich würde dann sagen das die beide statisch sind
System.out.println("11. myAthlete.activity : " + myAthlete.activity);
System.out.println("14. myAthlete.activity : " + myAthlete.activity);
und die andere dynamisch :)
 

Oli

Top Contributor
Das hat nichts mit dynamisch und statisch zu tun.

Das ist Vererbung.

HighJumper und Runner erben beide die Attribute und Methoden von Athlete.

Wenn du einer Athelte - Instanz einen HighJumper zuweist, werden immer die Attribute von Athlete übergeben. Es ist ja eine Athlete - Instanz.
Nur wenn du explizit die HighJumper - Instanz ansprichst bekommst du auch die Attribute von HighJumper zurück.

Es macht eigentlich auch keinen Sinn athlete = highJumper zu schreiben. Wozu leitet sich denn HighJumper sonst ab??

Lies mal das : Neues Konzept: Vererbung

Ist net schlecht und einfach zu verstehen, denke ich
 

Oli

Top Contributor
Naja auch nicht ganz richtig:

Für Attribute verwendent Java IMMER statisches Binden, für Methoden immer dynamsiches Binden

Grüße Oli
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Dynamisches/Statisches Binden ?? Java Basics - Anfänger-Themen 5
B Generische Typen für dynamisches Formular Java Basics - Anfänger-Themen 3
J Dynamisches Array durch split()-Funktion? Java Basics - Anfänger-Themen 3
N Dynamisches Programmieren/Fibonacci Java Basics - Anfänger-Themen 1
J Polymorphie und Dynamisches Binden richtig nutzen Java Basics - Anfänger-Themen 11
O Schlange als dynamisches Feld - Aufwand Java Basics - Anfänger-Themen 16
S Klassen Objekt- Tabelle / Dynamisches 2Dimensionales Array für Objekte Java Basics - Anfänger-Themen 6
C Erste Schritte Dynamisches Array Java Basics - Anfänger-Themen 11
T Dynamisches abarbeiten von statischen Methode aus verschiedenen Klassen. Java Basics - Anfänger-Themen 5
U Klassen Dynamisches Casten? Java Basics - Anfänger-Themen 39
X Methoden [GWT] Dynamisches Textfeld PopUp erstellen Java Basics - Anfänger-Themen 6
L dynamisches erzeugen von array Listen Java Basics - Anfänger-Themen 7
R dynamisches zweidimensionales Feld erzeugen Java Basics - Anfänger-Themen 8
A dynamisches Array - Index Liste Java Basics - Anfänger-Themen 2
maddin86 3 Dateien gleichzeitig speichern in dynamisches Benutzerverzeichnis (Windows) Java Basics - Anfänger-Themen 4
A dynamisches Array simulieren Java Basics - Anfänger-Themen 8
M Dynamisches Casten mal wieder Java Basics - Anfänger-Themen 4
A Dynamisches casten Java Basics - Anfänger-Themen 19
M Dynamisches Binden Java Basics - Anfänger-Themen 8
M dynamisches Clipboard mit Buttons Java Basics - Anfänger-Themen 5
R dynamisches binden Java Basics - Anfänger-Themen 3
K dynamisches Array Java Basics - Anfänger-Themen 13
M Zweidimensionales dynamisches Array füllen Java Basics - Anfänger-Themen 2
Bernasconi dynamisches JDialog Java Basics - Anfänger-Themen 2
R Dynamisches Gegenerieren von Objekten Java Basics - Anfänger-Themen 25
P dynamisches Binden klappt nicht so recht Java Basics - Anfänger-Themen 7
S dynamisches array + konstruktor Java Basics - Anfänger-Themen 5
K dynamisches Array erzeugen Java Basics - Anfänger-Themen 5
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
F Frage über Statisches binden Java Basics - Anfänger-Themen 1
B Statisches Array gesucht Java Basics - Anfänger-Themen 19
X SelectManyCheckbox an SelectOneRadio binden? Java Basics - Anfänger-Themen 3
V kann ich eine TextProperty an eine booloan variabel binden ? Java Basics - Anfänger-Themen 2
S Problem bei dynamischen Binden für Refaktorisierung Java Basics - Anfänger-Themen 2
T externe Datei fest an Projekt binden Java Basics - Anfänger-Themen 2
S Vector an Typ binden Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben