Wo ist hier der Fehler? Klammer - Java - Vererbung?
Ich versuche eine Unterklasse für ein Zoo-Projekt zu erstellen. Ich habe auch schon die Objekte erstellt und bin im Grunde fertig. Jedoch werden mir die Klammern der public class als falsch angezeigt.
Kann mir jemand helfen? Schon einmal Danke im Voraus!
Ganzes Projekt:
Kannst du deinen Code mal herzeigen? Sonst kann ich dir nicht viel helfen - sorry
Hab ihn jetzt eingefügt.
5 Antworten
Da sind so einige Fehler drin. Zum Beispiel benutzt die Variablen, die vorher nie deklariert/initialisiert wurden (Zeile 19, kName).
Die Klammersetzung an sich ist denke ich korrekt, aber durch die anderen vielen Fehler kommen wohl auch Syntax-Fehler hinzu, die an anderer Stelle ausgelöst werden.
Hat sich gelohnt; da sind so einige Fehler.
- Deine Oberklasse sollte nicht die Hauptklasse erweitern; dafür gibt es keinen Grund.
- Was ist der "new Tier"-Konstruktor? Wo kommt die Klasse her? Du hast in deinem Projekt keine Klasse Tier, entsprechend gibt es "new Tier ()" nicht.
- Ich vermute, ausgehend von den Argumenten, dass du mit "new Tier" eine Instanz von Oberklasse erstellen willst, oder?
- Chars werden in Java mit ' ' geschrieben, also nicht d, sondern 'd' in den Konstruktoren.
- Zeilen 16-20 in der Unterklasse ergeben keinen Sinn. Diese Werte setzt du ja mit dem Konstruktoraufruf weiter oben (wobei der Tier-Konstruktor ja nicht existiert, siehe 2.)
- Was soll "T" in Zeile 23 von Unterklasse sein?
Noch eine Anmerkung: Die Attribute in der Oberklasse sollte alle protected sein (also "protected String kName"), damit sie in der Unterklasse gesehen werden können (zwar nicht unbedingt nötig, aber schöner).
Danke, werde ich morgen versuchen umzusetzen!
Kann gerade nicht an den PC. Auf jedenfall hab ich erstmal ein Projekt erstellt und danach die Hauptklasse mit der public static void. Danach eine Oberklasse, in der ich alle Attribute, die die Objekte der Unterklasse haben sollen, deklariert. Also String kName, int kAlter etc. Und dann die Unterklasse (s.oben).
Das hilft nicht weiter. Wie gesagt, wenn du mir den kompletten Code schickst, kann ich gerne mal drüberschauen.
Sind das nicht die Attribute, die von der Oberklasse auf die Unterklasse(n) vererbt werden? Die hab ich nämlich zuvor schon deklariert.
Schick am besten mal den ganzen Code, also auch den der anderen Klassen.
1) Anweisungen gehören in einen Codeblock einer Methode (Konstruktoren inklusiv). Erstelle in Unterklasse also eine neue Methode, in der du die Zeilen 10-26 hineinwirfst.
public void doSomething() {
// lines 10-26
}
2) Eine Klasse Tier gibt es in deinem Projekt noch nicht. Du musst sie also erst anlegen und ihr den korrekten Konstruktor spendieren. Vorteilhaft wäre es dabei, die einzelnen Werte (Name, Farbe und was du da sonst noch angeben möchtest) als einzelne Parameter aufzutrennen, statt in einem einzigen String zu überreichen. Sicherlich will man mit den Werten doch noch separat weiterarbeiten können?
Des Weiteren benötigt die Tier-Klasse drei Definitionen der Methode gib. Jede einzelne Definition bekommt einen anderen Parametertyp überreicht.
3) Den Variablen T1-T3 fehlt jeweils eine Deklaration des Typs. Außerdem sind sie nicht gut benannt. Wähle eindeutige/aussagekräftige Bezeichner.
Letzteres gilt auch für die unbekannte Variable T in deiner Ausgabe, der eine komplette Deklaration und Definition fehlt.
4) Deine main-Methode ist leer. Da wird also beim Start deines Projekts aktuell noch nichts passieren.
Du brauchst noch eine main-Methode in deiner Klasse, damit das klappt
Was für eine Methode genau? Was soll ich da reinschreiben?
Ich glaube beim
new Tier(...)
fehlen dir hinter den Strings jeweils die schließenden Anführungszeichen. Ich denke so muss es aussehen:
new Tier("Affe", 69, "pink", 88, "d", 420)
Hab ich versucht, macht keinen Unterschied. Trotzdem werden die Klammern falsch angezeigt.
Dir fehlen Methoden. Alleine die Klasse reicht nicht, das ist nur das grobe "Gerüst" für den Rest. Code ausführen kann nur der Konstruktor, der beim Erzeugen der Klasse aufgerufen wird und die Methoden, die einzeln aufgerufen werden können. Die Klasse an sich benötigt also immer mind. den Konstruktor, selbst, wenn dieser leer ist.
public static void main(String[] args) {
// code hier rein von deiner klasse also innerhalb der { } die du jetzt hast
}
Klappt immer noch nicht... Hab jetzt die public static void in die public class eingefügt und leer geschlossen.
"Die Klasse an sich benötigt also immer mind. den Konstruktor, selbst, wenn dieser leer ist." Das ist schlicht falsch. Unter bestimmten Umständen kann man den Konstruktor in der Subclass weglassen und es wird implizit der Konstruktor der Superclass aufgerufen (natürlich abhängig von der Superclass, aber die ist ja hier nicht zu sehen).
Warte, schicke ihn sofort.