Dynamischer und statischer Typ von Referenzvariablen

Wi-yvi

Mitglied
Hallo 🙂

Ich bin grade am verzweifeln an einer Java-Aufgabe.

Geben Sie für die Anweisungen (A)-(G) in der main-Methode von Aufgabe_2 jeweils den dynamischen und den statischen Typ von der Referenzvariablen s und p an.

Java:
 public class Aufgabe_2
{
  public static void main (String []args)
  {
   Person p = new Person ();  //(A)
   Student s = new Student ();  //(B)
     p = new Student (); //(C)
     p = new Dozent (); //(D)
     s = new Student (); //(E)
     p = new Person (); // (F)
     p = new Student (); // (G)
     }
 }
class Person {// ...}
class Student extends Person {// ...}
class Dozent extends Person {// ...}

Zeile | Dynamischer Typ p | Statischer Typ p | Dynamischer Typ s | Statischer Typ s
(A)____|_______?_________|_______?______|_______? ________|_______?______
(B)____|_______?_________|_______?______|_______? ________|_______?______
(C)____|_______?_________|_______?______|_______? ________|_______?______
(D)____|_______?_________|_______?______|_______? ________|_______?______
(E)____|_______?_________|_______?______|_______? ________|_______?______
(F)____|_______?_________|_______?______|_______? ________|_______?______
(G)____|_______?_________|_______?______|_______? ________|_______?______


Kann mir bitte jemand helfen?
Vielen Dank im Voraus!
 
Was genau verstehst du nicht?
Du könntest einfach mal nachlesen, was ein statischer und ein dynamischer Typ ist, und dann diese Erkenntnis auf deine Aufgabe übertragen
 
Ich weiß was ein statischer und dynamischer Typ ist. Der statische steht bei der Deklaration fest und der dynamische kann sich während der Laufzeit ändern. Ich weiß aber nicht wie ich das genau auf die Aufgabe anwenden soll. Habe auch kein Beispiel dazu gefunden, sondern nur allgemeine Definitionen von den Typen.
 
Java:
Person p = new Person();
Student s = new Student();
Was sind da die statischen und was die dynamischen Typen? Wenn du jetzt die Statischen Typen von
Code:
s
und
Code:
p
kennst, was sagt das über die statischen typen der anderen Anweisungen?
 
Wenn du schreibst
Java:
Person p = ...
dann ist der statische Typ von p Person. Der statische Typ wird bei der Deklaration immer vor den Variablennamen geschrieben.

Schreibst du
Java:
new Person()
Dann erstellst du ein Objekt, das den dynamischen Typ Person hat. Der dynamische Typ wird beim Erstellen von Objekten festgelegt.

Übrigens - der dynamische Typ wird im Objekt selbst gespeichert und ist damit ein Teil der Eigenschaften eines Objekts. Für den statischen Typ gilt das nicht.
 
Ach komm. Lass uns das noch ein wenig weiter denken. Mit dem was DrZoidberg geschrieben hat, gebe ich dir mal die Lösung für (B). Vielleicht kannst du dir dann den Rest ja von alleine erschließen.

----------------------- (man verzeihe mir das weglassen der
Java:
-tags, aber sonst hätten die Farben nicht funktioniert)[/SIZE]
public class Aufgabe_2
{
[COLOR="LightBlue"]_[/COLOR]public static void main (String []args)
[COLOR="LightBlue"]_[/COLOR]{
[COLOR="LightBlue"]__[/COLOR][COLOR="DarkRed"]Person [/COLOR]p = new [COLOR="DarkOrchid"]Person [/COLOR]();  //(A)
[COLOR="LightBlue"]__[/COLOR][COLOR="Green"]Student [/COLOR]s = new [COLOR="RoyalBlue"]Student [/COLOR]();  //(B)
   ...
-----------------------
[B]Zeile | Dynamischer Typ p | Statischer Typ p | Dynamischer Typ s | Statischer Typ s[/B]
(B)____|_____[COLOR="DarkOrchid"]Person[/COLOR]_______|_____ [COLOR="DarkRed"]Person[/COLOR]____|______[COLOR="RoyalBlue"]Student [/COLOR]____|_____[COLOR="Green"]Student[/COLOR]____

Und wenn den Variablen p und s dann neue Objekte zugeordnet werden, kann sich der dynamische typ eben ändern. Er ist ja "dynamisch". Der "statische" Typ hingegen ändert sich nicht, da er (wie der Name schon sagt) statisch ist (also feststeht).

Properier mal die anderen Zeilen entsprechend auszufüllen. :rtfm:
 
Vielen Dank Natac! :toll:

Ich habe jetzt noch mal versucht die Tabelle auszufüllen.
Die sieht dann wie folgt aus:

Zeile | Dynamischer Typ p | Statischer Typ p | Dynamischer Typ s | Statischer Typ s
A | Person | Person | - | -
B | Person | Person | Student | Student
C | Student | Person | Student | Student
D | Dozent | Person | Student | Student
E | Dozent | Person | Student | Student
F | Person | Person | Student | Student
G | Student | Person | Student | Student

Ist das so richtig? 🙂
Weil irgendwie ändert sich bei mir immer nur der dynamische Typ p und alle anderen bleiben gleich. Weil s wird ja in Zeile E Student zugewiesen, aber das ist es ja schon vorher.. :reflect:

Liebe Grüße :meld:
 
Sieht für mich richtig aus.

Na ich denke die Aufgabe wird irgendwo in 10 Minuten konzipiert sein. Da macht man sich hinterher nicht so die Gedanken, ob das Lösungsbild nun abwechlsungsreich ist oder nicht 😉
 
Da wirst du wohl recht haben 😉
Dann ist das ja doch gar nicht so schwer..

Und dieses

[Java]
class Person { // ... }
class Student extends Person { // ... }
class Dozent extends Person { // ... }
[/code]

brauche ich nicht für die Aufgabe? Oder muss ich da noch irgendwas berücksichtigen?
 
Da wirst du wohl recht haben 😉
Dann ist das ja doch gar nicht so schwer..

Und dieses

[Java]
class Person { // ... }
class Student extends Person { // ... }
class Dozent extends Person { // ... }
[/code]

brauche ich nicht für die Aufgabe? Oder muss ich da noch irgendwas berücksichtigen?

Für die Aufgabe ist das irrelevant.
 

Zurück
Oben