# Dynamischer und statischer Typ von Referenzvariablen



## Wi-yvi (30. Jun 2014)

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.*


```
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!


----------



## Phash (30. Jun 2014)

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


----------



## Wi-yvi (30. Jun 2014)

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.


----------



## Tobse (30. Jun 2014)

```
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 
	
	
	
	





```
s
```
 und 
	
	
	
	





```
p
```
 kennst, was sagt das über die statischen typen der anderen Anweisungen?


----------



## Wi-yvi (1. Jul 2014)

Keine Ahnung. Wenn ich die Antwort wüsste hätte ich hier nicht nachgefragt.


----------



## DrZoidberg (1. Jul 2014)

Wenn du schreibst

```
Person p = ...
```
dann ist der statische Typ von p Person. Der statische Typ wird bei der Deklaration immer vor den Variablennamen geschrieben.

Schreibst du

```
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.


----------



## Wi-yvi (1. Jul 2014)

Hmm ok. Aber so richtig kann ich die Aufgabe immer noch nicht lösen


----------



## njans (1. Jul 2014)

Dann kann man dir wohl nicht helfen.


----------



## Wi-yvi (1. Jul 2014)

Aha, na dann vielen Dank für die "Hilfe"...


----------



## Natac (1. Jul 2014)

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 
	
	
	
	





```
-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:
```


----------



## Wi-yvi (2. Jul 2014)

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:


----------



## Natac (2. Jul 2014)

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


----------



## Wi-yvi (3. Jul 2014)

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?


----------



## Tobse (3. Jul 2014)

Wi-yvi hat gesagt.:


> Da wirst du wohl recht haben
> Dann ist das ja doch gar nicht so schwer..
> 
> Und dieses
> ...



Für die Aufgabe ist das irrelevant.


----------

