Vererbung Dynamischen und Statischen Typ einer Variablen nach Ausführung einer Anweisungsfolge

undercover

Aktives Mitglied
Hallo Developer :)
Ich habe eine Frage, es geht um die dynamischen und statischen Typen einer Variablen nach Ausführung einer Anweisungsfolge.
In meiner Erfahrung ist statische Variable eine Klassenvariable, die in allen Instanzen der Klasse existiert. Zu Beginn werden alle statischen Variablen und Methoden in den Speicher geladen und existieren solange das Programm läuft.
Eine dynamische Variable muss erst zur Laufzeit erzeugt werden und gilt nur solange das Object am "Leben" ist. Ist dies so Korrekt?

Wenn die Aufgabe nun folgendes vorgibt :
Code:
public interface Auto { }

public abstract class Karosse implements Auto { }

public class Innenraum implements Auto { }

public class Chassis extends Karosse { }

Und folgendes gefragt wird "Es soll der dynamische und der statische Typ der deklarierten Variable x nach der Ausführung bestimmt werden".

Gegeben ist :
1. Auto x = new Chassis (); // statischen + dynamischen bestimmen
und :
2. Auto x = new Chassis(); // statischen + dynamischen bestimmen
x = new Innenraum();

Bei 1 würde ich sagen Chassis ist dynamisch, aber was ist statisch und wieso ?
Bei 2 würde ich ebenso sagen Chassis ist dynamisch...

Wäre für eine Erklärung sehr verbunden.
 

mrBrown

Super-Moderator
Mitarbeiter
statischer Typ ist bei beiden x Auto, der ist ja zur Compile-Zeit bekannt und kann sich auch nicht ändern.

dynamischer Typ ist bei 1 Chassis, bei 2 zuerst Chassis, und danach Innenraum, es wird ja neu zugewiesen
 

undercover

Aktives Mitglied
Wieso ist x bei Compile-Zeit bekannt ? Weil es sich um eine Interface Klasse handelt?

Innenraum x = null;
x = new Innenraum();

Karosse x;
x = new Chassis();

Wie sieht es bei der Konstellation aus? Eine Erklärung wäre top.
 

mrBrown

Super-Moderator
Mitarbeiter
Wieso ist x bei Compile-Zeit bekannt ? Weil es sich um eine Interface Klasse handelt?
Weil da Auto x steht, es ist angegeben, dass x ein Auto ist. Der statische Typ ist immer der, als der die Variable deklariert war.


Innenraum x = null;
x = new Innenraum();

Karosse x;
x = new Chassis();

Wie sieht es bei der Konstellation aus? Eine Erklärung wäre top.
Bei beiden ist der statische Typ wieder der, mit dem die Variable deklariert wurde, und der dynamische der, den du dann zuweist, in den beiden Fällen also das, was nach dem new kommt ;)
 

undercover

Aktives Mitglied
Ah okay jetzt habe ich es. Handelt es sich bei der Variante mit null nicht um einen Sonderfall? Dachte in dem Fall wäre null der statische.
 

undercover

Aktives Mitglied
Top vielen Dank für die Hilfe, nun ist mir das ganze etwas geläufiger :) solange keine Sonderfälle existieren , habe ich es gerallt.
 
X

Xyz1

Gast
Wieso schaust du eigentlich nicht in deine Vorlesungsunterlagen? Diese Frage ist so speziell, dass sie 95 bis 99 % der (regelmäßig) hier Antwortenden *nicht* beantworten können. Da ist es doch fast selbstverständlich, dass man sich erst mal selber bemüht. Nagut, indirekt impliziert das jetzt auch, dass @mrBrown (etwas) Ahnung hat (oder im Bilde ist, wie man möchte). :D
 

Neue Themen


Oben