"Overriden statische Methode" Statische Methode die vererbt wird

pcProfie

Aktives Mitglied
Hallo,
ich hätte gerne eine Methode, die es in allen Unterklassen gibt, und dazu auch statisch ist.
Beispiel:

Es gibt ein "Spiel" (vlt sogar abstrakt, oder auch als Interface GameInfo).
Dann gibt es noch etwas vom Spiel abgeleitetes, z.B. PacMan.
Ich möchte das PacMan und jedes andere, das entweder von Spiel abgeleitet ist, oder jedes das GameInfo implementiert die folgende Methoden enthält: getName() und getBeschreibung(). Jede untere Klasse hat eigenen Inhalt für die Methoden z.B. return "pacman";. wie kriege ich es hin das zu realisieren? Man muss von außen darauf zugreifen können: Pacman.getbeschreibung()... und die Methode muss es in der Unterklasse geben.

Abstrakte Methoden können nicht statisch sein, statische Methoden können nicht @Override sein. wie funzt das?
Danke schonmal!
 
Du kannst deiner Klasse einfach eine Methode geben, die das verhalten deiner statischen Methode enthält. Dann baust du eine statische Methode, die dann intern diese Methode aufruft.
 
Code:
public abstract String getGameDesc();
    
    public static void machma() {
        getGameDesc();
    }
so? das geht doch nicht wegen "non-static method ... cannot be referencered from a static context"
Es geht halt darum, dass ich das "Spiel" bzw "GameInfo" mache, damit jmd. anderes eine ableitung davon machen kann und ich dann auf jeden fall auf diese (statischen) methoden zugreifen kann. also wenn ich dann ein spiel von jmd. anderem bekomme, das von meiner klasse abgeleitet ist, dass ich auf jeden fall getBeschreibung starten kann, ohne gleich das spiel zu starten (wegen konstruktor starten wegen objekt für nichtstatische methoden == spiel startet)
 
Du möchtest nicht "Pacman.getBeschreibung" aufrufen, sondern "spiel.getBeschreibung", wobei "spiel" entweder durch "new Pacman()" oder "new AnderesSpiel()" entstanden ist, also als Typ "GameInfo" hat. Wenn beide "GameInfo" implementieren, können auch beide in einer Variable vom Typ "GameInfo" gespeichert werden und ein Aufruf von "getBeschreibung" wird dann zur richtigen Methode zugeordnet. Deshalb brauchst du keine statischen Methoden.
 
Zuletzt bearbeitet:
Tja, rme, so einfach ist das nicht.
Vor pcProfie's Problem stand ich auch schon. Manchmal möchte man kein Objekt einer Klasse anlegen, aber über die Klasse etwas erfahren können (mittels Methodenaufruf); und es soll garantiert funktionieren (z.B. zwingend per Vererbung).

Aber in Java kann man static-Methoden nicht abstract machen, damit der Erbende sie implementieren müsste.

Aus dem Dilemma kommt man entweder, indem man Abstriche an die Anforderungen macht (nicht-static oder nicht-vererbungs-gezwungen / nicht als Methodenaufruf, ...) oder man geht den harten Weg über Tests zum Programmstart mittels Reflections -> man prüft Anforderungen an Klassen mittels Reflections, die sich anders in Java nicht abblinden lassen.
 
Klingt nach Design-Fehler. Das Spiel sollte man nicht im Konstruktor starten. Ich würde das abändern ... Alternativ musst du deine Klasse wrappen:

Java:
interface Plugin {
  public Spiel start();
  public String getName();
  public String getVersion();
}

Java:
public MeinPlugin() {
  public Spiel start() {
    return newPackman();
  }

  public String getName() {
    return "Packman";
  }

  public String getVersion() {
    return "1.0.0";
  }
}
 

Zurück
Oben