Wo ist hier der Fehler? Klammer - Java - Vererbung?

verreisterNutzer  06.03.2022, 14:22

Kannst du deinen Code mal herzeigen? Sonst kann ich dir nicht viel helfen - sorry

Enricolo 
Fragesteller
 06.03.2022, 14:33

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.


Enricolo 
Fragesteller
 06.03.2022, 15:29

Sind das nicht die Attribute, die von der Oberklasse auf die Unterklasse(n) vererbt werden? Die hab ich nämlich zuvor schon deklariert.

0
jaannippon  06.03.2022, 15:30
@Enricolo

Schick am besten mal den ganzen Code, also auch den der anderen Klassen.

0
Enricolo 
Fragesteller
 06.03.2022, 15:32

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).

0
jaannippon  06.03.2022, 15:34
@Enricolo

Das hilft nicht weiter. Wie gesagt, wenn du mir den kompletten Code schickst, kann ich gerne mal drüberschauen.

0
Enricolo 
Fragesteller
 06.03.2022, 15:34

Warte, schicke ihn sofort.

0
jaannippon  06.03.2022, 15:52
@Enricolo

Hat sich gelohnt; da sind so einige Fehler.

  1. Deine Oberklasse sollte nicht die Hauptklasse erweitern; dafür gibt es keinen Grund.
  2. 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.
  3. Ich vermute, ausgehend von den Argumenten, dass du mit "new Tier" eine Instanz von Oberklasse erstellen willst, oder?
  4. Chars werden in Java mit ' ' geschrieben, also nicht d, sondern 'd' in den Konstruktoren.
  5. 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.)
  6. Was soll "T" in Zeile 23 von Unterklasse sein?
0
jaannippon  06.03.2022, 15:56
@jaannippon

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).

0
Enricolo 
Fragesteller
 06.03.2022, 19:21
@jaannippon

Danke, werde ich morgen versuchen umzusetzen!

0

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.


Enricolo 
Fragesteller
 06.03.2022, 19:22

Danke, werde ich morgen versuchen umzusetzen!

0

Du brauchst noch eine main-Methode in deiner Klasse, damit das klappt


Enricolo 
Fragesteller
 06.03.2022, 14:50

Was für eine Methode genau? Was soll ich da reinschreiben?

0
MrAmazing2  06.03.2022, 15:00

Nein, braucht er nicht. Schau dir mal seine Klassen an

0

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)
Woher ich das weiß:Hobby – Programmieren ist mein Hobby & Beruf

Enricolo 
Fragesteller
 06.03.2022, 15:02

Hab ich versucht, macht keinen Unterschied. Trotzdem werden die Klammern falsch angezeigt.

0
MrAmazing2  06.03.2022, 17:54
@Enricolo

Du musst den Code natürlich noch ein eine Methode schreiben

0

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.

Woher ich das weiß:eigene Erfahrung

Enricolo 
Fragesteller
 06.03.2022, 14:51

Was genau soll ich da schreiben?

1
verreisterNutzer  06.03.2022, 14:52
@Enricolo

public static void main(String[] args) {

// code hier rein von deiner klasse also innerhalb der { } die du jetzt hast

}

1
Enricolo 
Fragesteller
 06.03.2022, 14:58
@verreisterNutzer

Klappt immer noch nicht... Hab jetzt die public static void in die public class eingefügt und leer geschlossen.

0
jaannippon  06.03.2022, 15:27

"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).

0