meine frage betrifft den kommentiert gedruckten Teil:
Kann ich in einer abstrakten Klasse, in einer nicht abstrakten methode (fuettern) 2 abstrakte Methoden einbauen? Also die 2 abstrakten Methoden werde ich in den Unterklassen schreiben, doch ich will dann in meinen Objekten (die der Unterklassen) auf die nicht abstrakte Methode fuettern zurückgreifen...geht das? mein compiler sagt nein, andere probleme kann ich 8eigentlich) auschliessen...
Hab es gerade mal selbst an nem eigenen Stück Code ausprobiert, scheint nicht zu gehen, wie es aussieht. Allerdings sehe ich auch nicht soo die Notwendigkeit dafür, das zu tun, denn was bezweckst du damit? Dann hast du bspw. eine Methode, die zwei andere Methoden aufruft. Das hättest du auch einfacher haben können, indem du die beiden gewünschten Methoden direkt in die Main-Methode schreibst, denke ich…
Hab es gerade mal selbst an nem eigenen Stück Code ausprobiert, scheint nicht zu gehen, wie es aussieht. Allerdings sehe ich auch nicht soo die Notwendigkeit dafür, das zu tun, denn was bezweckst du damit? Dann hast du bspw. eine Methode, die zwei andere Methoden aufruft. Das hättest du auch einfacher haben können, indem du die beiden gewünschten Methoden direkt in die Main-Methode schreibst, denke ich…
Gute Frage, ich mache dass aus rein didaktischen Gründen, ich will also lernen und kein Problem lösen. und es wäre dabei schön wenn ich Polymorphie und Vererbung/ abstrakte Klassen miteinbeziehen kann. In der main methode wäre ein solches dingens natürlich besser aufgehoben, aber für grössere Projekte der Übersichtlichkeit zum zwecke wählte ich halt diesen weg...
@ fassy:
mhh, aber ich definiere die Methode doch noch gar nicht, ich teile dem Compiler doch nur mit, dass meine Unterklassen die Definition übernehmen werden. Aber sonst bin ich mit dem Faktum, das das schlichtwegs ned geht, zufrieden. Danke.
Wahrscheinlich habe ich die Aufgabenstellung einfach verfehlt:
Erstellen Sie eine abstrakte Klasse Haustiere. Die Klasse besteht aus
* den Instanzvariablen
String name;
double futtervorrat;
int anzahlTage; // gibt die Anzahl Tage aus, die der Futtervorat reicht
* einem Konstruktor, der die beiden Instanzvariablen name und futtervorrat initialisiert ( Dieser Kontruktor kann zwar nicht direkt genutzt werden, da die abstrakte Klasse Haustiere nicht instanziiert werden kann, aber er kann von den Subklassen Katze und Hund verwendet werden.)
* der Methode
public void fuettern()
{
// Hier erfolgt zuerst der Aufruf der Methode sprich().
// Solange der Futtervorat reicht, wird dann die Methode friss() aufgerufen
// und die Anzahl der Tage hochgezählt, die der Vorrat reicht.
// Implementiert werden die abstrakten Methoden sprich() und friss() erst in den Subklassen.
}
* der Methode
public void anzeigen()
{
// zeigt den Namen des Haustiers an und wie viele Tage der Futtervorrat reicht
}
* und den abstrakten Methoden
public abstract void friss();
public abstract void sprich();
Lt. Aufgabenstellung sollst Du in fuettern() die Methode sprich() aufrufen (und nicht etwa deklarieren, was syntaktisch tatsächlich nicht möglich ist).
Ja, die Schilderung der Aufgabenstellung ist tatsächlich etwas verwirrend. Es wird über die Methoden sprich() und friss() geredet, noch ehe die (bei dir mit Sternchen markierte) Aufzählung überhaupt dort angelangt ist. Vielmehr hätte man den Teil
* und den abstrakten Methoden
public abstract void friss();
public abstract void sprich();