methode in anderen klassen aufrufen

  • Ich hätte mal wieder eine wahrscheinlich relativ einfache frage:
    wie kann ich eine methode einer klasse in einer anderen klasse aufrufen?

    momentan extende ich die klassen die eben diese methode brauchen von der klasse die die methode besitzt, bin damit aber nicht ganz zufrieden, da ich die methode generell benutzen wollen würde
    ich habe mir kurz implements angeschaut, bin mir aber nicht sicher wie ich das umsetzen würde
    (generell erscheint es mir etwas unpraktisch klassen zu oft zu extenden da es dann etwas unübersichtlich wird welche variablen wie belegt sind und aus welcher klasse sie aufgerufen bzw überschrieben werden)

    mein problem:
    ich habe objekte und möchte mir zu diesen objekten die kürzest mögliche distanz ausrechnen (mittels A* algorithmus den ich momentan funktionierend drinnen habe), im allgemeinen reicht mir die kürzeste distanz; im falle das objekt auch zum ziel zu bringen, benötige ich dann natürlich auch den optimalen weg und muss das objekt am weg zum ziel führen

    bin heute etwas am verzweifeln :P da ich es gestern nicht geschafft habe das ganze übersichtlicher umzuschreiben (mein gestriger ansatz war: weiterhin die "pathfinding" klasse zu extenden und dann aus dieser klasse weiterführend andere klassen extenden, was mich wie vorhin gesagt dazu führt dass viele variablen unübersichtlich belegt und überschrieben werden)


    ps: aja und wenn ich schon dabei bin hier mal zu posten
    (habe es zwar mittlerweile anders gelöst aber)
    java images benötigen als letzten parameter einen ImageObserver - was genau ist das - bzw wie kann ich in einer beliebigen klasse diesen parameter füllen (sobald die klasse zb applet extendet kann ich einfach nur this reinschreiben - habe vor ein paar tagen dazu gelesen wenn die klasse irgendetwas bestimmtes extendet kann ich einfach nur this benutzen) was müsste ich tun um in einer klasse die nicht zb applet extendet ein image in der paint mathode zu zeichnen

    Matthias
    CGUE, Vis2, Infovis Tutor

  • Wenn du eine Methode von Klasse in A in Klasse B verwenden möchtest, erstellst du einfach in B ein Objekt vom Typ A und rufst dann die Methoden über objektvomTypA.methode() auf. Genauso wie du das mit Klassen von der Java API machst.
    Extenden solltest du nur, wenn's wirklich sinnvoll ist. Also Person -> Student zum Beispiel. Aber wenn du nur Methoden verwenden willst, nicht vererben. (Ausnahmen gibt's natürlich...)
    Allzuviele Variablen, die sich in abgeleiteten Klassen überschreiben lassen bzw. die du wirklich überschreibst, sind auch nicht sonderlich gut.
    Wie meinst du, du hast dir implements angesehen? Das brauchst du eigentlich nur, wenn du von einem Interface "erbst". Wenn du "normale" Klassen hast, die vererbst oder Methoden anderer Klassen verwendest, brauchst du das nicht.

  • na gut, ja das war auch noch einer meiner ansätze von gestern - ein objekt vom typ A in B erzeugen (gestern war ich noch der meinung das das nicht ganz optimal in meinem fall sein könnte, naja kam mir etwas komisch vor in jeder der klassen B,.. wieder ein objekt vom typ A zu erstellen)

    aber ist wahrscheinlich so die beste lösung, werde es einfach mal so probieren, danke

    im grunde war mein ansatz der dass jedes bewegliche objekt von der move klasse extendet (in der sich auch das pathfinding befindet), mit dem bin ich aber aufgrund der übersichtlichkeit nicht mehr so zufrieden (und auch aufgrund der tatsache dass auch nicht bewegliche objekte distanzen berechnen sollten die in der move klasse auch berechnet werden)

    Matthias
    CGUE, Vis2, Infovis Tutor

  • Hmm... weiß nicht, was du genau vorhast... aber unter Umständen gehört der Code für das Berechnen nicht in die Move-Klasse? Hast du eine allgemeine Klasse für Objekte vielleicht, die das alle berechnen können sollen? Ansonsten klingt der Ansatz ja gut, alle beweglichen Objekte von einer entsprechenden Klasse abzuleiten.

  • leider nicht, ich unterscheide zwischen stationären objekten und beweglichen objekten - wäre sicher auch eine möglichkeit nochmal für alle objekte eine überklasse zu haben und dort distanzen auszurechnen (meine triviale lösung im moment ist, dass ich einfach meine klassen umbenannt habe und jetzt scheit es mir schon viel übersichtlicher :P)
    das problem ist eigentlich nur dass ich mit A* im grid kästchen bewerte und als nebenprodukt bekomme ich dann den kürzesten weg (wobei ich für bewegliche objekte mit dem bewerteten grid den kürzesten weg ausrechne) bei stationären objekten wäre es im grunde egal da es nebensächlich ist welcher weg genau genommen wird

    also für reine distanz genügt es mir zu wissen bei welcher "zahl" ich das ziel erreiche - weiterführend brauch ich aber das bewertete grid um mir den weg auszugeben

    aber da werd ich schon ne lösung finden, es ist irgendwie witzig, aber alleine durch das umbenennen der klassen scheint mir das ganze plötzlich wieder viel übersichtlicher :P

    tschuldigung.. bin etwas ausgeschweift:
    der code für das berechnen gehört in die move klasse da es nur ein nebenprodukt der move klasse ist (siehe grid usw oben) - wenn ich den code auslagere muss ich in jedem fall das bewertete grid weitergeben was für reine distanzberechnung sinnlos wäre

    naja ich glaube ich sollte wieder zurechtkommen, danke für die schnelle antwort

    Matthias
    CGUE, Vis2, Infovis Tutor

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!