Anzeige:
Ergebnis 1 bis 5 von 5

Thema: Problem mit Java - Klassen und Interfaces

  1. #1
    Registrierter Benutzer
    Registriert seit
    28.04.2007
    Beiträge
    6

    Problem mit Java - Klassen und Interfaces

    Hallo,

    ich habe ein Problem bei einer Aufgabe in Java...
    Wir sollen 2 Klassen und 2 Interfaces anlegen (iss ja nich schwer).

    Die Oberklasse heißt "Hero" und soll die Methode "void swim()" haben.
    Die andere Klasse mit dem Namen "ActionCharacter" soll die Methode "void fight()" haben und von Hero erben.
    Das erste Interface heißt "ICanFight" und soll die Methode "void fight()" haben.
    Das zweite Interface soll "ICanSwim" heißen und soll die Methode "void swim()" haben.
    Beide Interfaces sollen in Hero implementiert werden.

    Jede Methode der Klassen sollen "Klassenname.Methodennamen" und einen Zeilenumbruch ausgeben.

    Soweit so gut.

    Hier meine Source Codes:

    ActionCharacter.java
    ----------------------------------------------------------
    public class ActionCharacter extends Hero
    {
    public void fight()
    {
    System.out.println("ActionCharacter.fight");
    }
    }
    ----------------------------------------------------------

    Hero.java
    ----------------------------------------------------------
    public class Hero implements ICanFight, ICanSwim
    {
    public void swim()
    {
    System.out.println("Hero.swim");
    }

    public void fight()
    {
    System.out.println("Hero.fight");
    }
    }
    ----------------------------------------------------------

    ICanFight.java
    ----------------------------------------------------------
    interface ICanFight
    {
    void fight();
    }
    ----------------------------------------------------------

    ICanSwim.java
    ----------------------------------------------------------
    interface ICanSwim
    {
    void swim();
    }
    ----------------------------------------------------------

    Ich hoffe die Interfaces sind richtig, habe noch nie mit Interfaces gearbeitet, habe aber extra nochmal nachgesehen und so hatten wir es mal in einer Vorlesung...


    Nun zum Hauptprogramm (1:1 vom Übungszettel)

    Adventure.java
    ----------------------------------------------------------
    public class Adventure {

    static void t(ICanFight x) { x.fight();}
    static void u(ICanSwim x) { x.swim();}
    static void w(ActionCharacter x) { x.fight(); }

    public static void main(String[] args)
    {
    Hero h = new Hero();
    t(h);
    u(h);
    w(h);
    ActionCharacter ac = new ActionCharacter();
    ac.fight();
    }
    }



    Wir sollen angeben, was auf der Konsole ausgegeben wird. Nur leider bekomme ich bei "w(h);" andauernd beim compilieren einen Fehler:

    Adventure.java:12: w(ActionCharacter) in Adventure cannot be applied to (Hero) w(h);

    Kann mir vielleicht jemand erklären warum ???
    Liegt es vielleicht daran, dass die Methode w ein Objekt vom Typ "ActionCharacter" haben möchte und ein Objekt vom Typ "Hero" bekommt. Und funktioniert es bei "ICanFight" und "ICanSwim" deshalb, weil es Interfaces der Klasse "Hero" sind und keine eigenen Klassen?

    Und ich verstehe auch nicht wie Java die Variable bzw. das Objekt "h" instanziiert??? Es gibt doch gar keinen Konstruktor ????

    Vielen Dank schonmal

  2. #2
    Registrierter Benutzer
    Registriert seit
    28.04.2007
    Beiträge
    6
    Ich habe inzwischen herausgefunden, dass der Fehler auf meiner Vermutung basiert. Die Methode will ein Objekt vom Typ "ActionCharacter" bekommt aber ein Objekt vom Typ "Hero"...

    Würde man die Methode "w" nach der Instanziierung von "ac" mit dem Objekt "ac" (also "w(ac);") aufrufen funktioniert es...

    Da stellt sich mir die Frage, ist es ein Fehler auf dem Übungsblatt oder sollten wir in diesen Fehler laufen. Aufgabenstellung war ja nur anzugeben, was das Hauptprogramm (Adventure.java) auf der Konsole ausgibt. Deshalb kann ich es mir nicht vorstellen, dass die auch noch extra Fehler einbauen (war zumindest noch nie so, wenn war es mit angegeben, wie z.B. "suchen sie den Fehler" oder "warum funktioniert es nicht").... Ich bin mir jetzt sehr unschlüssig was ich als antwort schreiben soll...

    1. Es gibt gar nichts aus, da beim compilieren ein Fehler auftritt...

    2. (Mit Korrektur des Programms) Es gibt
    Hero.fight
    Hero.swim
    ActionCharacter.fight // von ac.fight
    ActionCharacter.fight // von w(ac)

    aus....

  3. #3
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Dem Namen der Klassen nach ist die Ableitungsrichtung falsch, d.h. Hero sollte von ActionCharacter ableiten.

    Ob dann allerdings ActionCharacter die beiden Interfaces implementieren soll, oder nur eines und Hero das andere, kann man so nicht sagen.

    Wenn du die Angaben hier korrekt wiedergegeben hast, sind da Fehler drinnen.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  4. #4
    Registrierter Benutzer
    Registriert seit
    28.04.2007
    Beiträge
    6
    Danke für die Antwort...

    Ja, meine Zusammenfassung war richtig und es war der vermutete Fehler drin. Die Aufgabe habe ich inzwischen gelöst....

    Aber trotz dessen, danke für die Antwort

  5. #5
    Registrierter Benutzer
    Registriert seit
    28.04.2007
    Beiträge
    6
    Ich hab nochmal nachgesehen.... Meine Impementaion war doch falsch. Oberklasse ist ActionCharacter und Unterklasse ist Hero und Hero implementiert auch die Interfaces. Somit haben sich gleich einige Probleme gelöst, aber danke für eure Hilfe

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •