# Was genau bedeutet und bewirkt dieses @override?



## DennisXX (21. Okt 2010)

also wenn das über einer beliebigen Funktion z.B. steht


```
@override
public String getName(){

//beliebige Implementierungen

}
```

Danke schön für die Hilfe !


----------



## SlaterB (21. Okt 2010)

Google
->
Override (Java 2 Platform SE 5.0)


----------



## tfa (21. Okt 2010)

Das besagt, dass die Methode von der Mutterklasse überschrieben wurde.
Wenn es in der Mutterklasse keine solche Methode gibt, kommt es zu einem Compilerfehler.
Dies ist z.B.  nützlich um Fehler bei Refactoring früh zu erkennen.


----------



## Purgator (21. Okt 2010)

Annotation (Java) ? Wikipedia
Ist wie es da heißt praktisch eine Info, dass der Compiler schauen soll, ob die Oberklasse wirklich diese Methode enthält.
Wenn dies nicht der Fall ist, benachrichtigt dich der Compiler.


----------



## Runtime (21. Okt 2010)

Annotations (The Java™ Tutorials > Learning the Java Language > Classes and Objects)


----------



## Thief (21. Okt 2010)

Gelöscht.

Das Beispiel war falsch. Die Grundidee hatte aber gepasst.

Auf der Arbeit kann man halt nicht alles direkt ausprobieren....


----------



## SlaterB (21. Okt 2010)

selber vorher auszuprobieren ist zuviel verlangt?


----------



## Gast2 (21. Okt 2010)

Hm, also der Code ist mist 

```
B b = new A();
```
oder

```
C c = new A();
```
Wie sollte das gehen?

Außerdem wirkt sich @override da auch nicht wirklich drauf aus (selbst wenn das beispiel funktionieren würde)


----------



## energy47 (21. Okt 2010)

auch umgekehrt zu sehen ist @override eine annotation um dem compiler mit zu teilen "ja es ist absicht dass die methoder der basis klasse überschrieben wird"  überschreibt mal zb toString, dann bekommt man zwar kein fehler aber eine warnmeldung.. und hier für ist die annotaion um die warnmeldun zu quitieren..


```
public class Test {

       public void bla() {}

}

class A extends Test {
      
      @override
      public void bla() {}  // ohne @override gibts an dieser stelle ein ewarnmeldung

}
```


----------



## Gast2 (23. Aug 2012)

energy47 hat gesagt.:


> // ohne @override gibts an dieser stelle ein ewarnmeldung[/code]



Bei mir machts mit und ohne @override keinen Unterschied. 
Dabei wärs doch so genial.


----------



## X5-599 (23. Aug 2012)

Bei Eclipse lässt es sich einstellen was gemacht werden soll. Bei missing Overrides steht's beir z.B. auf "Ignore" ...


----------



## Gast2 (23. Aug 2012)

Danke X5-599! 

Überhaupt: Interessante Einstellungen,
die man unter 
Window / Preferences / Java / Compiler / Errors/Warnings​findet.


----------



## Crian (23. Aug 2012)

Das ist echt interessant!


----------



## Pentalon (23. Aug 2012)

Wenn Du z.B. die Methode "equals" überschreiben möchtest und Dich dabei verschreibst "equal", dann führt das zu keinem Fehler, weil Du halt einfach eine neue Methode "equal" gemacht hast. Zur Laufzeit bemerkst Du dann zwar, dass Dein selbst gemachtes Equal nicht angewendet wird und wirst vermutlich einige Zeit benötigen, bis Du den Schreibfehler bemerkst. Diesen Fall fängt @OVERRIDE ab, indem es Dich informiert "Hey, da gibt es keine Methode die zu überschreiben wäre bzw. so heisst".

Pentalon


----------



## SlaterB (23. Aug 2012)

oder noch relevanter:
vergleichsweise häufig schreiben manche
class X {
equals(X other)
}
welches nicht equals(Object other) überschreibt

gefährlicher Fehler, das funktioniert sogar in eigenen gewissen Tests mit Xen, 
aber dann nicht in allgemeinen Algorithmen mit Objekten, etwa HashMap


----------



## tfa (23. Aug 2012)

Auch sehr praktisch: Wenn z.B. eine Methode in einer Oberklasse entfernt oder umbenannt wird, merkt man das in den Subklassen dank @Overrides sofort, wenn diese Methode dort überschrieben wird.


----------

