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
Lesezeichen