# statische Methoden und Vererbung



## static methode (25. Jan 2010)

huhu leute,
ich benutzt Eclpise und mir gestern folgendes aufgefallen:

Statische Methoden werden ja nicht vererbt, und zwar in dem Sinne, dass sie nicht überschrieben werden können, sondern nur verdeckt werden können.

Aussage von Sun: You can write a new static method in the subclass that has the same signature as the one in the superclass, thus hiding it. [ Inheritance (The Java™ Tutorials > Learning the Java Language > Interfaces and Inheritance) ]

Letzten Endes bedeutet das ja einfach, wenn man 1 Methode in der Basisklasse hat und 1 identische Methode in der Subklasse, haben die 2 Methoden nichts miteinander zu tun und sind vollkommen eigenständige Methoden, .....


```
class Foo
{
    static void fkt()
    {
    }
}

class Bar extends Foo
{
     * ..... dennoch bekomm ich hier in Eclipse folgenden Fehler:
     * Exception "Exception" is not compatible with throws clause in Foo.fkt()
     *
     * Hat der Compiler nen Dachschaden oder was ist hier los ??
     */
    static void fkt() throws Exception
    {
    }
}
```

Danke für Eure Meinunge


----------



## Janus (25. Jan 2010)

> the same signature


throws Klauseln gehören zur Signatur einer Methode.


----------



## Empire Phoenix (25. Jan 2010)

You can write a new static method in the subclass that has the same signature as the one in the superclass, thus hiding it.

Daraus folgt nciht das du eine Methode mit dem selben namen und einer anderen signature/kopf haben kannst ^^


----------



## static Methode (25. Jan 2010)

Empire Phoenix hat gesagt.:


> Daraus folgt nciht das du eine Methode mit dem selben namen und einer anderen signature/kopf haben kannst ^^



hä aber das funtkioniert doch auch:^^

```
class Foo
{
    static void fkt()
    {
    }
}
class Bar extends Foo
{
    static void fkt(int i)
    {
    }
}
```


----------



## Gast2 (25. Jan 2010)

Das hast du ja auch andere Parameter, ist also nicht die gleiche Methode wie in Foo. Sogesehen hat Bar.fkt(int i) nichts mit Foo.fkt() zu tun. Ungefähr soviel wie Foo.fkt() mit Bar.fkt2().


----------



## Unbekannter (25. Jan 2010)

static methode hat gesagt.:


> wenn man 1 Methode in der Basisklasse hat und 1 identische Methode in der Subklasse, haben die 2 Methoden nichts miteinander zu tun und sind vollkommen eigenständige Methoden
> 
> 
> ```
> ...






fassy hat gesagt.:


> Das hast du ja auch andere Parameter, ist also nicht die gleiche Methode wie in Foo. Sogesehen hat Bar.fkt(int i) nichts mit Foo.fkt() zu tun.



Was hat hier dann Foo.fkt() mit Bar.fkt() zu tun ??


----------



## Gast2 (25. Jan 2010)

Gleicher Name, gleicher Rückgabetyp und gleiche Parameterliste sind die Voraussetzung für ein hiding der Funktion der Super-Klasse. Aber du darfst dann nicht noch ein throws hinzufügen, d.h. die Signatur muss identisch sein. Wenn du so etwas baust was du gibt es halt einen Compilerfehler.


----------

