Attribute bei Objektorientierter Programmierung

Funktionierdochmal

Bekanntes Mitglied
Moin Leute,
Folgendes Problem: Ich habe zwei Klassen. Einmal das WeihnachtsObjekt und einmal das GewichtigeWeihnachtsObjekt (abgekürzt GWO). Die Klasse WeihnachtsObjekt sieht so aus
Java:
package de.weihnachten;

public class WeihnachtsObjekt {
   
    private int gewicht;
   
    public WeihnachtsObjekt(int gewicht) {
        super();
    }

    public int getGewicht() {
        return 0;
    }
Alle meine Klassen (u.a. auch GWO) sollen von dieser Klassen erben, jedoch soll GWO ein eigenes Gewicht haben. Der Grund warum ich vorher super() und return 0 geschrieben habe: das WeihnachtsObjekt erbt an zwei weitere Klasse, die ein Gewicht von 0 haben, aber meine Klasse GWO hat ein EIGENES gewicht, das er ebenso an zwei weitere Klassen erbt, die auch ein gewicht HABEN. Allerdings wird mir ständig gezeigt, dass ich gewicht auf protected setzen muss, es aber laut Aufgabenstellung nicht darf. So sieht mein GWO aus:
Java:
public class GewichtigesWeihnachtsObjekt extends WeihnachtsObjekt {

   
    public GewichtigesWeihnachtsObjekt(int gewicht) {
        this.gewicht = gewicht;
    }
   
   
    @Override
    public int getGewicht() {
        return this.gewicht;
    }
Wie kann ich nun (ohne eine weitere Methode einzufügen) ein eigenes gewicht für GWO setzen und bei WeihnachtsObjekt ein gewicht von 0 haben?
Ich bedanke ich vielmals.
 

httpdigest

Top Contributor
Wenn die Klasse WeihnachtsObjekt gar kein Gewicht haben soll (sondern einfach 0), warum gibst du ihm denn dann eine `gewicht` Instanzvariable? Die ist doch vollkommen unnötig. Deklariere diese Instanzvariable doch erst in einer Subklasse, welche auch ein konfigurierbares Gewicht haben soll. Falls die Schnittstelle aller deiner Klassen so aussehen soll, dass jedes WeihnachtsObjekt die Methode getGewicht() haben soll, welche aber einfach 0 für die Oberklasse WeihnachtsObjekt zurückliefert, mach es vielleicht so:
Java:
public abstract class WeihnachtsObjekt {
  public int getGewicht() {
    return 0;
  }
}
public class GWO extends WeihnachtsObjekt {
  private int gewicht;
  public GWO(int gewicht) {
    this.gewicht = gewicht;
  }
  public int getGewicht() {
    return gewicht;
  }
}
 

Funktionierdochmal

Bekanntes Mitglied
Ja, das dachte ich auch, nur sagt die Aufgstellung mir "Ein WeihnachtsObjekt ist alles was mit dem Weihnachtsmann zu tun hat, potentiell ein Gewicht hat und mit einem anderen WeihnachtsObjekt kollidieren kann". Aber wenns nicht anders geht, verschiebe ich die Variable in die Klasse GWO. Aber ich habe dennoch ein weiteres Problem dann: Ich habe eine Klasse Geschenk die von GWO erbt und: "Ein Geschenk hat ein zufälliges Gewicht in Kilogramm. Dieses wird beim Erstellen des Geschenks im Konstruktor bestimmt. Das Gewicht muss zwischen 1kg und 20kg (beides inklusive) liegen".
Java:
package de.weihnachten;

public class Geschenk extends GewichtigesWeihnachtsObjekt {
   
    public Geschenk(int gewicht) {
        this.gewicht = XMasUtils.getZufallsGanzzahl(1, 20);
    }
Mir wird angezeigt, dass ich gewicht unbedingt auf protected setzen muss, ich verstehs nicht...
 

httpdigest

Top Contributor
Der Grund für die Fehlermeldung ist, dass du in einer Subklasse versuchst, auf eine private Instanzvariable einer Superklasse zuzugreifen. Das geht nicht. Private Instanzvariablen dürfen nur von derselben Klasse zugegriffen werden, in der sie deklariert wurden.

Dann erzeuge doch einfach eine zufällige Variable und rufe den super-Konstruktor auf:
Java:
public abstract class WeihnachtsObjekt {
  public int getGewicht() {
    return 0;
  }
}
public class GWO extends WeihnachtsObjekt {
  private int gewicht;
  public GWO(int gewicht) {
    this.gewicht = gewicht;
  }
  public int getGewicht() {
    return gewicht;
  }
}
public class Geschenk extends GWO {
  public Geschenk() {
    super(XMasUtils.getZufallsGanzzahl(1, 20));
  }
}
 

Funktionierdochmal

Bekanntes Mitglied
Doch, hier schau mal!
Java:
package de.weihnachten;

public class WeihnachtsObjekt {
   

    public int getGewicht() {
        return 0;
    }
Java:
package de.weihnachten;

public class GewichtigesWeihnachtsObjekt extends WeihnachtsObjekt {
    private int gewicht;
   
    public GewichtigesWeihnachtsObjekt(int gewicht) {
        this.gewicht = gewicht;
    }
   
   

    public int getGewicht() {
        return this.gewicht;
    }
Java:
package de.weihnachten;

public class Geschenk extends GewichtigesWeihnachtsObjekt {
   
    public Geschenk() {
        super(XMasUtils.getZufallsGanzzahl(1, 20));
    }
 

httpdigest

Top Contributor
Und der Fehler wird dir ganz genau wo angezeigt? Die Fehlermeldung enthält eine Zeilennummer oder irgendwo im Editor in der IDE wird etwas rot unterkringelt. Es wäre hilfreich, wenn du die Fehlermeldung hier mal in eine Zeile in deinem gezeigten Code übersetzt. Aber aktuell ist es unmöglich, dass der Compiler diese Fehlermeldung für nur diesen gezeigten Code generiert. Die Fehlermeldung muss sich auf bis jetzt ungezeigten Code beziehen.
 

Funktionierdochmal

Bekanntes Mitglied
Oh sorry habs abgespeichert jetzt sind die Kringel weg. :D
Ich habe einige weitere Fragen, ich hoffe, du hilfst mir weiterhin!
Ich habe eine weiter Klasse Rentier:
Java:
package de.weihnachten;

public class Rentier extends GewichtigesWeihnachtsObjekt {
    private double hunger;
   
    public Rentier() {
        super(XMasUtils.getZufallsGanzzahl(1, 20));
        super(XMasUtils.getZufallHunger(1.0, 2.0));
    }
   


    public double getHunger() {
        return hunger;
    }
Mein Rentier hat nicht nur ein Gewicht, sondern auch hunger. Nun wollte ich dasselbe wie beim Geschenk abtippen, aber beim zweiten super kommt eine Fehlermeldung:"Constructor call must be in the first statement in a constructor".
Liegt es daran, dass ich bei der Klasse GWO nur das Gewicht als Parameter habe, heisst muss ich es ergänzen? Oder gibt es einen anderen Weg?
 

httpdigest

Top Contributor
Versuche doch erstmal zu recherchieren und zu verstehen, was super(...); überhaupt tut... Es ruft den Konstruktor der Superklasse (das hinter dem "extends") auf. Dieser Superkonstruktor hat offensichtlich nur ein Gewicht und keinen Hunger, da ja nicht jedes gewichtige Weihnachtsobjekt ein Rentier ist und Hunger hat.
Du muss also einfach nur der Instanzvariablen `this.hunger` im Konstruktor von Rentier den Zufallswert zuweisen. Das Ganze mit dem Hunger hat ja schließlich überhaupt nichts mehr mit der Superklasse zu tun.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Standardkonstruktor, Attribute initialisieren Java Basics - Anfänger-Themen 5
K wie kann ich alle Attribute von dem Objekt(pagode) ausgeben lassen ? Java Basics - Anfänger-Themen 3
S Attribute zurücksetzen? Java Basics - Anfänger-Themen 2
K Sichtbarkeit protected: Attribute trotzdem aufrufbar. Java Basics - Anfänger-Themen 4
B Attribute eines Objekts einer Klasse durch statische Methode einer 2. Klasse ändern? Java Basics - Anfänger-Themen 32
G Welche Attribute kommen in den Konstruktor? Java Basics - Anfänger-Themen 5
X Wie erreiche ich, dass ein Robot weitere Attribute hat, die nicht materialisiert sind, sondern nur über get/ set-Methoden simuliert sind? Java Basics - Anfänger-Themen 1
M Wie können Klassen nicht-materialisierte Attribute haben, die nur über get/ set-Mehoden simuliert sind? Java Basics - Anfänger-Themen 6
B Static Attribute in einer Klasse, wie geht das? :O Java Basics - Anfänger-Themen 19
O Attribute die Methoden zählen Java Basics - Anfänger-Themen 5
L Attribute aus Klasse in berechnungs Methode übergeben Java Basics - Anfänger-Themen 1
Gaudimagspam Attribute einfügen private Java Basics - Anfänger-Themen 3
J final attribute erben Java Basics - Anfänger-Themen 2
T Vererbung Verschiedene Attribute für vererbte Klassen Java Basics - Anfänger-Themen 4
B Infos zu Attribute in einer Klasse speichern Java Basics - Anfänger-Themen 3
S Objekt-Attribute "variabel" gestalten Java Basics - Anfänger-Themen 10
R Attribute mehrerer Objekte ausgeben Java Basics - Anfänger-Themen 3
D Abstrakte Klasse, Konstruktorkette, Attribute setzen Java Basics - Anfänger-Themen 12
L Zugriff auf Attribute eins Objekts über ActionListener Java Basics - Anfänger-Themen 4
C unverständlicher Code Attribute ohne Datentyp, wie geht das? Java Basics - Anfänger-Themen 8
R Zwei Attribute gleichzeitig ausgeben Java Basics - Anfänger-Themen 12
Q Zugriff auf Attribute Java Basics - Anfänger-Themen 3
C Methoden Vererbung private Attribute/public Methoden Java Basics - Anfänger-Themen 4
I Abstrakte Klasse - static Attribute deklarieren Java Basics - Anfänger-Themen 14
S Zufallszahl (Statische Attribute und Methoden) Java Basics - Anfänger-Themen 10
K Public Attribute oder getter - funktioniert leider beides hier nicht Java Basics - Anfänger-Themen 5
X XML-Eintrag an Attribute erkennen Java Basics - Anfänger-Themen 2
W Erste Schritte füllen Attribute java Klasse in for Schleife und Array Java Basics - Anfänger-Themen 16
B Alle Attribute von Klasse bekommen und ändern Java Basics - Anfänger-Themen 12
R Objekt erstellen - Attribute mit mehreren Werten Java Basics - Anfänger-Themen 1
T Kann erbende Klasse Attribute der vererbenden Klasse anpassen (int -> float)? Java Basics - Anfänger-Themen 9
dat_vin OOP Hashmap und Attribute Java Basics - Anfänger-Themen 7
C OOP Array Objektverweise und Attribute Java Basics - Anfänger-Themen 5
S Klassen Zugriff auf Attribute einer zweiten Klasse, welche durch dritte gesettet wurden? Java Basics - Anfänger-Themen 2
O Unterschiedliche Attribute in Objekklasse? Java Basics - Anfänger-Themen 5
E Attribute von einem Objekt einer anderen Klasse ändern Java Basics - Anfänger-Themen 4
K Durch alle Attribute eines Objektes iterieren Java Basics - Anfänger-Themen 6
F Attribute von Feldinhalten erkennen Java Basics - Anfänger-Themen 6
A Variablen Attribute Java Basics - Anfänger-Themen 8
F konstante/variable Attribute? Java Basics - Anfänger-Themen 3
J Threads Zugriff auf Attribute Java Basics - Anfänger-Themen 16
M Wann statische Methoden/Attribute? Java Basics - Anfänger-Themen 2
ElfterDoktor Einen Objekt Attribute/Parameter geben & Auslesen Java Basics - Anfänger-Themen 4
R Zeigerfehler für Attribute Java Basics - Anfänger-Themen 11
L Vererbung Attributen der Oberklasse Attribute hinzufügen? Java Basics - Anfänger-Themen 3
S Ermitteln und Setzen der Attribute eines Objektes Java Basics - Anfänger-Themen 6
F Im Konstruktor mit Settern auf private Attribute zugreifen - oder nicht? Java Basics - Anfänger-Themen 18
P Zugriff auf Attribute einer Klasse, zu der keine Verbindung besteht Java Basics - Anfänger-Themen 11
V OOP Statische Klassen-Attribute vererben Java Basics - Anfänger-Themen 4
T Attribute eines anderen Objektes überprüfen und danach handeln Java Basics - Anfänger-Themen 7
M static Attribute und Vererbung Java Basics - Anfänger-Themen 11
S Warum sind Attribute der Klasse java.awt.Point public? Java Basics - Anfänger-Themen 3
K OOP Attribute von Klasse in die public class übertragen? Java Basics - Anfänger-Themen 7
E Fehler bei Klassenübergreifende Attribute / Konsturktoren Java Basics - Anfänger-Themen 2
P Attribute von Objekten in Vectoren überprüfen Java Basics - Anfänger-Themen 4
S Attribute darf nur Werte vom Intervall annehmen Java Basics - Anfänger-Themen 5
M Attribute Java Basics - Anfänger-Themen 8
M Attribute und Konstruktor Java Basics - Anfänger-Themen 5
V JNDI / LDAP Attribute eines Benutzers auslesen Java Basics - Anfänger-Themen 1
J Attribute not settable warum ? Java Basics - Anfänger-Themen 6
N finale Attribute in abstrakten Basisklassen Java Basics - Anfänger-Themen 6
O Wie kann man das einfach lösen? (dynamisch viele Attribute) Java Basics - Anfänger-Themen 6
Q Zugriff auf Attribute einer Unterklasse Java Basics - Anfänger-Themen 7
S OOP Attribute Java Basics - Anfänger-Themen 2
T OOP StringTokenizer, Zuweisung der einzelnen Attribute Java Basics - Anfänger-Themen 21
K Klassen Attribute sortieren Java Basics - Anfänger-Themen 10
S Ausgabe bestimmter Attribute Java Basics - Anfänger-Themen 5
B die einzelnen Attribute einzeln vergleichen Java Basics - Anfänger-Themen 10
L E-Mail Attribute IMAP ändern Java Basics - Anfänger-Themen 4
K Attribute überschreiben! Java Basics - Anfänger-Themen 2
A Stilfrage: statische Methoden und Attribute auf jeden Fall verhindern? Java Basics - Anfänger-Themen 5
dataframe Attribute aus anderen Methoden übernehmen? Java Basics - Anfänger-Themen 14
M Zugriff auf Attribute über Methoden Java Basics - Anfänger-Themen 6
A statische Attribute: Vererbung und Zugriff darauf Java Basics - Anfänger-Themen 15
H Attribute auf Einzigartigkeit prüfen Java Basics - Anfänger-Themen 6
T Was sind Attribute? Java Basics - Anfänger-Themen 9
G Methode um Attribute auszulesen Java Basics - Anfänger-Themen 5
H attribute die zusammengehören Java Basics - Anfänger-Themen 9
G Wie kann ich auf die Attribute einer anderen Klasse zugreife Java Basics - Anfänger-Themen 5
J Auslesen aller Attribute mit JDOM Java Basics - Anfänger-Themen 15
N Unterschied statische Attribute u. Methoden <-> objekt Java Basics - Anfänger-Themen 4
M Attribute werden mit den Startwerten überschrieben. Warum? Java Basics - Anfänger-Themen 12
T Failed to load Main-Class manifest attribute from U.U.jar Java Basics - Anfänger-Themen 3
P Attribute Vererben Java Basics - Anfänger-Themen 2
Z Zugriff auf Attribute nach Zuweisung einer Referenz Java Basics - Anfänger-Themen 8
D Session Attribute in JSP ausgeben???? Java Basics - Anfänger-Themen 3
F Ich brauche Hilfe bei Objektorientierter Programmierung... Java Basics - Anfänger-Themen 19
D Problem mit objektorientierter Übung Java Basics - Anfänger-Themen 2
H schlechter objektorientierter stil Java Basics - Anfänger-Themen 6
M Java Programmierung Aufgabe Anfänger Java Basics - Anfänger-Themen 1
F Automat-Programmierung Java Basics - Anfänger-Themen 30
N Lambdas, Methodenref, fkt Programmierung ? Java Basics - Anfänger-Themen 10
districon Dynamisch Programmierung/Backtracking/Memoization Java Basics - Anfänger-Themen 3
S Buchstaben Programmierung Bedeutung Java Basics - Anfänger-Themen 4
S Hilfe bei Programmierung einer Hotelabrechnung Java Basics - Anfänger-Themen 5
enjoykimii Strukturierte Programmierung Hilfe Java Basics - Anfänger-Themen 29
A Frage zur programmierung Java Basics - Anfänger-Themen 12
Nerdinfekt Programmieranfänger, Schwierigkeiten mit der Programmierung Java Basics - Anfänger-Themen 6
U Compiler-Fehler Programmierung einer Drehkugel Java Basics - Anfänger-Themen 8
L Programmierung mit Hash Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben