# serialVersionUID



## reibi (27. Sep 2011)

Hi

Ich hab mir mal sowas gebaut:


```
public abstract class GenericServlet extends HttpServlet { 
private static final long serialVersionUID = GenericServlet.generateNewUID();
...
```

und benutz das dann so:


```
public class MyServlet extends GenericServlet { ...
```

Dat Ding funktioniert prima ;-)

Nur will der in der Klasse "MyServlet" auch immer ne eigene "serialVersionUID" haben.
Warum wird n das nich vererbt?
und gibts ne Möglichkeit das zu vererben?


Gruss


----------



## inv_zim (27. Sep 2011)

> Beim Serialisieren eines Objektes wird auch die serialVersionUID der zugehörigen
> Klasse mit in die Ausgabedatei geschrieben. Soll das Objekt später deserialisiert
> werden, so wird die in der Datei gespeicherte serialVersionUID mit der aktuellen
> serialVersionUID des geladenen .class-Files verglichen. Stimmen beide nicht
> ...



(Quelle: Institut für Informatik)


----------



## reibi (27. Sep 2011)

OK ... verstanden.

Und warum wird sowas nicht vererbt:


```
public abstract class GenericServlet extends HttpServlet { 
private static final long serialVersionUID = -3046507032255219296L;
```


Gruss


----------



## inv_zim (27. Sep 2011)

Da die SerialVersionUID eindeutig sein muss, um die Klassen bei deserialisieren wieder zuordnen zu können. Wenn alle vererbten Klassen die selbe SerialVersionUID haben, wird selbige ja witzlos, oder?


----------



## tfa (27. Sep 2011)

Statische Eigenschaften werden nie vererbt.


----------



## maki (27. Sep 2011)

Es wird vererbt(zwar nicht wirklich, aber immer noch sichtbar), aber das ist nicht der Punkt.

Bei der SerialUID geht es darum, dass jede Klasse ihre eigene haben sollte, zumindest ist das die Meinung von Eclipse.

Bist du dir sicher dass du verstanden hast worum es bei der Serial UID und der Eclipse Warnung geht?


----------



## reibi (27. Sep 2011)

maki hat gesagt.:


> Bei der SerialUID geht es darum, dass jede Klasse ihre eigene haben sollte, zumindest ist das die Meinung von Eclipse.



Und was ist der Grund "waum jede ein haben sollte?"
Ich meine nicht den Grund warum es eine solche SerialUID bei allen serialisierbaren Klassen baucht. Das ist übrigens klar.
egal ;-)




maki hat gesagt.:


> Bist du dir sicher dass du verstanden hast worum es bei der Serial UID und der Eclipse Warnung geht?


Ja .. ist mir klar!

Aber grundsätzlich könnte doch auch die von der vererbten Klasse genommen werden - vor allem weil diese ja eh abstract ist und damit nicht initialisiert werden kann.

Gruss


----------



## maki (27. Sep 2011)

Eclipse ist der Meinung (default Einstellung) dass jede serialisierbare Klasse ihre eigene braucht, der Kompiler erzeugt einfach eine neue falls keine vorhanden ist.. was bedeutet dass dein Plan nicht funzen wird.

Ihmo fährt man in 99.9% der Fälle am besten mit der vom Kompiler erzeugten und die Eclipse default Warnung ist falsch.


----------



## reibi (27. Sep 2011)

maki hat gesagt.:


> was bedeutet dass dein Plan nicht funzen wird



Ich weees ;-)

Trotzdem Danke für die Disko ... weiss jetzt wieder n bisschen mehr

Gruss ;-)


----------



## fastjack (28. Sep 2011)

tfa hat gesagt.:
			
		

> Statische Eigenschaften werden nie vererbt.



warum?


----------



## faetzminator (28. Sep 2011)

fastjack hat gesagt.:


> warum?



Ist dir das etwas neues ???:L


----------



## fastjack (28. Sep 2011)

```
public class StaticA {
    final static String PACKAGE_PRIVATE = "";
    private final static String PRIVATE = "";
    protected final static String PROTECTED = "";
    public final static String PUBLIC = "";

}
```


```
public class StaticB extends StaticA {
    public void foo() {
        System.out.println(PACKAGE_PRIVATE);
        System.out.println(PROTECTED);
        System.out.println(PUBLIC);
        System.out.println(PRIVATE); // compile error
    }
}
```

und wo ist da jetzt das Problem?


----------



## fastjack (28. Sep 2011)

Okay, nicht direkt Vererbung aber StaticB hat nun Zugriff auf die Teile von StaticA, ohne sie zu referenzieren. Rein technisch sind es aber die Felder von StaticA.


----------



## maki (28. Sep 2011)

Sie werden zwar vererbt, aber können nicht wirklich überschrieben werden, nennt sich dann "shadowing", mit Polymorphy ist auch nix, kann Ärger machen


----------

