# statische, dynamischer Typ von Variablen



## Han (19. Jun 2006)

Hallo....und zwar zweifle ich an der Richtigkeit eines im Skript gezeigten Beispiels.

Gegeben sei folgendes Szenario:


```
public class Timer {
//.........
}

public class ClockTimer extends Timer{
//......
}

public class DayTimer extends ClockTimer{
//....
}

public class Trigger extends Timer{
//....
}
```

So..und nun ist gefragt:

*Was ist der statische und dynamische Typ der fettgedruckten Variablen?*


DayTimer *dayTimer* = new DayTimer(..); statische: DayTimer, dynamischeayTimer  (klar)
Timer *timer* = dayTimer; statische: Timer, dynamischeayTimer  (klar)
ClockTimer *clockTimer* = dayTimer; statische: ClockTimer, dynamischeayTimer  (wieso dynamische nicht Timer?)
*timer* = clockTimer; statische: DayTimer, dynamischeayTimer  (wieso dynamische nicht ClockTimer?)

mfg,
Han


----------



## Murray (19. Jun 2006)

Die Begriffe "statischer und dynamischer Datentyp" habe ich so noch nicht gehört. Das Beispiel versucht aber offenbar, den Unterschiede zwischem dem Typ der Referenz (also der Typ der Variablen gemäß ihrer Deklaration) und dem Typ der Instanz (Objekteigenschaft, die lediglich bei der Erzeugung festgelegt wird und sich währed der Objekt-Lebensdauer nicht mehr ändert) zu unterscheiden:

Also:
  statischer Typ = Typ der Referenz (auf dieser Basis macht der Compiler die Typprüfungen)
  dynamischer Typ = Objekt-Typ (auf dieser Basis passieren die Laufzeit-Typprüfungen)

Im Beispiel ist der dynamische Typ auch im 3. und 4. Fall immer noch DayTimer, weil es sich immer noch um die selbe Instanz handelt, deren Typ sich niemals ändern kann.


----------

