Vererbung

Individuum

Mitglied
Hallo zusammen,

ich sitze an einem Problem was die Vererbung angeht momentan fest. Ich habe 3 Klassen: PalletManager, Pallet sowie Flüssigkeiten.
Flüssigkeiten erbt von der Klasse Pallet.
Java:
package main.goods;

public class Pallet {

    private String description = "";
    private int id;
    private int width;
    private int depth;
    protected int heigth;
    private boolean cooling;
    private long incoming;
    private int outgoing;

    private static int nextid = 1;

    /**
     * Creates a pallet from given values
     * @param description - describes the content
     * @param width - width of the pallet
     * @param depth - depth of the pallet
     * @param height - height of the pallet
     * @param cooling - true, if the pallet requires cooling
     * @param duration - estimated duration of stocking in days
     */
    public Pallet(String description, int width, int depth, int height, boolean cooling, int duration) {
        this.id = nextid++;
        this.description = description;
        this.width = width;
        this.depth = depth;
        this.heigth = height;
        this.cooling = cooling;
        this.incoming = System.currentTimeMillis();
        this.outgoing = (int) this.incoming + (duration * 24 * 60 * 60 * 1000);
    }

    /**
     * Generates a human-readable string with basic information.
     * @return basic information about the pallet
     */
    public String getText() {
        StringBuffer result = new StringBuffer("[" + id + "] " + description + "(" + width + "x" + depth + "x" + heigth + ")");

        //todo: append weight and total value
        
        return result.toString();
    }

    public String getDescription() {return description;}
    public int getId() {return id;}
    public int getWidth() {return width;}
    public int getDepth() {return depth;}
    public int getHeigth() {return heigth;}
    public boolean isCooling() {return cooling;}
    public long getIncoming() {return incoming;}
    public int getOutgoing() {return outgoing;}
}

Die Klasse Flüssigkeiten welche von Pallet erbt:
Java:
package main;

import main.goods.Pallet;

public class Flüssigkeiten extends Pallet {
    public int auslass = 100;
    public static double Dichte;
    public double Preis;
    private double KemlerZahl;
    private double UnNummer;

    public double getDichte() {return 729 * Dichte * (auslass/100);}
    public double getPreis() {return 729 * Preis * (auslass/100);}

    public void setDichte(double dichte) {
        Dichte = dichte;
    }

    public void setPreis(double preis) {
        Preis = preis;
    }

    public String getString () {return super.getText() + Dichte + Preis;}

    public Flüssigkeiten (String description, boolean cooling, double Preis, int Lagerdauer, double Dichte, double KemlerZahl, double UnNummer) {
        super(description, 90, 90, 90, cooling, Lagerdauer);
        this.Dichte = 729 * Dichte * (auslass/100);
        this.Preis = 729 * Preis * (auslass/100);
        this.KemlerZahl = KemlerZahl;
        this.UnNummer = UnNummer;
    }
}

Okay hier ist meine Frage: Wie kann ich in meiner Pallet Klasse (genauer in der Methode get Text auf meine Eigenschaften aus der Klasse Flüssigkeiten (Preis und Dichte) zugreifen, sodass wenn ich in meiner Main Klasse ein neues Pallet Objekt erstelle und den Konstruktor aus Flüsigkeiten aufrufe diese Werte mir dann auch mit der Methode getText aufrufen kann.

Vielen Dank fürs lesen und eure Hilfe!
 

temi

Top Contributor
Verwende keine deutschen Umlaute in Klassen-/Variablennamen. Das kann zu Problemen führen.

Zu deinem Problem: Entweder du änderst die Sichtbarkeit der Instanzvariablen von Pallet von private zu protected oder du führst für die gewünschten Werte getter-Methoden ein. Die können auch protected sein, wenn sie von außerhalb nicht benötigt werden.

Edit: Nicht genau hingeschaut. Du hast ja bereits getter-Methoden.

Edit2: Einige der Instanzvariablen von Flüssigkeiten sind public. Das sollte man vermeiden. Generell gilt beim Design von Klassen, dass eine Klasse sowenig wie möglich von sich nach außen preisgeben soll und nur soviel wie nötig. Deshalb ist es auch nicht so, dass man immer für alle Werte Getter und Setter programmiert. Eher im Gegenteil. Der innere Status sollte im Idealfall über die Funktion der Klasse geändert werden, nicht durch gezielten Zugriff auf Einzelwerte. Ein Beispiel dafür wäre eine Klasse Auto, die über einen Tankinhalt als Instanzvariable verfügt. Anstatt einen Setter für diesen Wert zu programmieren, sollte die Veränderung des Tankinhalts über ein Methode Fahre(int km) geschehen.
 
Zuletzt bearbeitet:

Individuum

Mitglied
Danke für deine Hinweise aber das hilft mir ja jetzt auch nicht weiter.
Auch wenn ich die Sichtbarkeit von Pallet Eigenschaften von private auf protected stelle, will ich ja in meiner Pallet Klasse
auf die Eigenschaften der vererbten Klasse (Flüssigkeiten zugreifen).
Vielleicht noch ein wenig genauer warum ich es nicht einfach in der Main Methode über ein Flüssigkeiten Objekt aufrufe:

Wir haben ein Pallet Array gegeben und können durch ein neues PalletObjekt den Konstruktor aus Flüssigkeiten aufrufen.
 

temi

Top Contributor
Danke für deine Hinweise aber das hilft mir ja jetzt auch nicht weiter.
Auch wenn ich die Sichtbarkeit von Pallet Eigenschaften von private auf protected stelle, will ich ja in meiner Pallet Klasse
auf die Eigenschaften der vererbten Klasse (Flüssigkeiten zugreifen).

Oh, sorry. Falsch verstanden. Das geht nicht. Woher soll den die vererbende Klasse wissen, an wen sie alles vererbt wird. Neben Flüssigkeiten könnte es ja noch 1000 andere Klassen geben, die von Pallet erben.

Aber probier doch mal aus:
Java:
public class Foo {

    private int value = 42;

    public int getValue() {
        return value;
    }

    public String getText() {
        return "" + value;
    }
}

public class Bar extends Foo {

    private int value2 = 24;

    @Override
    public String getText() {
        return "" + getValue() + value2;
    }
}

public class Main {

    public static void main(String[] args) {
        Foo foo = new Bar();
        System.out.println(foo.getText());
    }
}
 
Zuletzt bearbeitet:

White_Fox

Top Contributor
Auch dann sehe ich nicht, warum eine Flüssigkeit eine Palette sein sollte.

@Individuum
Ich würde dir raten, dir das mit der Vererbung nocheinmal genauer anzusehen. Vererbung kann man dann machen, wenn eine Ist-Ein-Beziehung vorliegt. Ist Flüssigkeit ein Pallet? Oder ist es nicht eher eine Hat-Ein-Beziehung (Pallet hat eine Flüssigkeit)?
 

temi

Top Contributor
Auch dann sehe ich nicht, warum eine Flüssigkeit eine Palette sein sollte.

Eine Flüssigkeit an sich ist natürlich keine Palette. Aber ich denke jetzt an IBC-Behälter. Das sind stapelbare Behälter für Flüssigkeiten im Europalettenformat.

Ob es für die Aufgabe eine bessere Lösung gibt? Keine Ahnung. Wir kennen ja die Aufgabe nicht.
 

White_Fox

Top Contributor
Sehr oft kannst du Klassen so aufbauen, wie die Realität die Objekte hergibt.

Du könntest z.B. eine Superklasse 'Behälter' haben, und davon die Klassen Palette, Container, Faß, Flasche, ... ableiten. Diese könnten die Methoden füllen(), leeren(), ... miteinander teilen.

Du könntest eine Superklasse 'Flüssigkeit' haben, und davon Benzin, Spiritus, Schnaps, ... ableiten. Diese könnten z.B. die Eigenschaften Dichte, Preis, ... miteinander teilen.

Ich sehe aber nicht, wie eine Flüssigkeit und ein Behälter irgendetwas gemeinsam haben, das sind völlig verschiedene Dinge. Wenn du der Klasse Palette eine Methode stapeln() mitgibst, würde die Klasse Flüssigkeit diese auch implementieren müssen. Ergibt es aber irgendeinen Sinn, Flüssigkeiten stapeln zu wollen?
 

mrBrown

Super-Moderator
Mitarbeiter
Nur weil die Namensgebung optimal ist muss es ja nicht heißen dass es nicht funktioniert ;)
So eine Modellierung steht und fällt mit der Namensgebung, und spätestens wenn man mit anderen drüber reden will, sollte die Namensgebung möglichst optimal sein :)

@White_Fox der Name ist nicht optimal gewählt ja. Paletten können aber alles Lagern. Zum Beispiel Flüssigkeiten, Feststoffe etc.
Wieso soll da keine Vererbung möglich sein?

Formuliere mal „X ist ein Y“, und setz für X und Y deine Klassen ein :)
 

White_Fox

Top Contributor
Nur weil die Namensgebung optimal ist muss es ja nicht heißen dass es nicht funktioniert
Egal wie du deine Klassen nennst, irgendeine Funktion werden sie doch hoffentlich erfüllen und etwas repräsentieren. Also versuche, eine Antwort auf meine Frage zu finden: Ergibt es irgendeinen Sinn, etwas, das eine Flüssigkeit repräsentieren soll, stapeln zu wollen?

Das, was du herzustellen versuchst, ist eine IST-EIN-Beziehung. Was du aber tatsächlich hast, ist eine HAT-EIN-Beziehung, das mußt du auseinanderhalten. Und als Ergänzung zu @mrBrown : Formuliere mal "X hat ein Y" und setz für X und Y deine Klassen ein.

Übrigens ist dieses "Zuweisen von Bedeutung" ein ganz elementarer Bestandteil der Informatik. So jedenfalls meine Beobachtung als Nichtinformatiker.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
imocode Vererbung Problem mit Vererbung Java Basics - Anfänger-Themen 2
M Vererbung - Polymorphie Java Basics - Anfänger-Themen 37
L Java- Vererbung Java Basics - Anfänger-Themen 4
ineedhelpinjava Vererbung Java Basics - Anfänger-Themen 12
ineedhelpinjava Vererbung Java Basics - Anfänger-Themen 1
I JSON / XML Struktur mit Vererbung / Interfaces Java Basics - Anfänger-Themen 0
M Interface oder Vererbung? Java Basics - Anfänger-Themen 12
M Vererbung Java Basics - Anfänger-Themen 6
M Designentscheidung von Attributen/Methoden im Falle von Vererbung Java Basics - Anfänger-Themen 8
M Generics Vererbung Listen Java Basics - Anfänger-Themen 2
A Methoden Vererbung und Interface Java Basics - Anfänger-Themen 14
D Klassen und Vererbung Java Basics - Anfänger-Themen 2
U Vererbung Java Basics - Anfänger-Themen 7
D Vererbung Java Basics - Anfänger-Themen 3
K Schleife berechnet kein Ergebnis (Vererbung) Java Basics - Anfänger-Themen 6
00111010101 Objektorientiertes Programmieren mit Vererbung (Zahlen in Array verschwinden) Java Basics - Anfänger-Themen 3
W Zur Vererbung: Wann und wie? Java Basics - Anfänger-Themen 35
H Datenkapselung, Vererbung und UML Java Basics - Anfänger-Themen 16
districon Super-Stichwort/ Vererbung Java Basics - Anfänger-Themen 3
YaU Vererbung erstellt NullPointerException? Java Basics - Anfänger-Themen 4
1 Vererbung Klassenattribute Java Basics - Anfänger-Themen 9
TimoN11 Frage zu Java-Vererbung (Cast) Java Basics - Anfänger-Themen 5
N Thema Vererbung Java Basics - Anfänger-Themen 31
A Vererbung Vererbung Übung Java Basics - Anfänger-Themen 5
B Vererbung - Sichtbarkeitsmodifikation - protected Java Basics - Anfänger-Themen 10
B Best Practice Unschlüssig ob Vererbung oder Interface Java Basics - Anfänger-Themen 2
G Java Vererbung Java Basics - Anfänger-Themen 8
Y Vererbung Konto - Anfangsprobleme Java Basics - Anfänger-Themen 7
A Vererbung Klassen im Bezug auf Auto´s Java Basics - Anfänger-Themen 18
A Klassen Vererbung und zusätzliche Unterklassen Java Basics - Anfänger-Themen 23
M Vererbung mit Enums Java Basics - Anfänger-Themen 8
Kirby.exe Vererbung im Detail erklärt? Java Basics - Anfänger-Themen 9
N Modellierung, vererbung, Java Basics - Anfänger-Themen 163
M Fehlendes Verständnis für dynamische Bindung und Vererbung Java Basics - Anfänger-Themen 13
W OOP Vererbung im Computerspiel Java Basics - Anfänger-Themen 7
J Probleme mit Vererbung Java Basics - Anfänger-Themen 4
W OOP Vererbung und Problem bei Zählschleife in einer Methode Java Basics - Anfänger-Themen 10
W Methoden Verständnisfrage Vererbung von Methoden Java Basics - Anfänger-Themen 14
V Vererbung Java Basics - Anfänger-Themen 2
J Frage zur Vererbung Java Basics - Anfänger-Themen 1
J Vererbung Java Basics - Anfänger-Themen 3
U Was löst meine NullPointerException aus? (Vererbung) Java Basics - Anfänger-Themen 12
O Vererbung Ueben mit kleiner Datenstruktur von Räumen Java Basics - Anfänger-Themen 10
O Umgang mit Vererbung verstehen Java Basics - Anfänger-Themen 4
A Vererbung/Interfaces/Generics Java Basics - Anfänger-Themen 12
O Vererbung änderung des Konstruktors Java Basics - Anfänger-Themen 8
L Vererbung Java Basics - Anfänger-Themen 5
E HashMap+Vererbung Java Basics - Anfänger-Themen 11
E Vererbung super-Methoden Aufruf Java Basics - Anfänger-Themen 3
B Java Vererbung Fragen (zu Code Beispiel) Java Basics - Anfänger-Themen 3
A Objekterstellung bei der Vererbung Java Basics - Anfänger-Themen 7
P Vererbung Warum funktioniert die Vererbung hier nicht Java Basics - Anfänger-Themen 14
S Vererbung Java mehrfach Java Basics - Anfänger-Themen 10
B Objekte zählen/ Vererbung/ Kopplung/ Interface/ Abstract Class Java Basics - Anfänger-Themen 5
A Klassen Vererbung privater Methoden und Member Java Basics - Anfänger-Themen 12
A Konstruktoren Vererbung Java Basics - Anfänger-Themen 3
ReinerCoder Vererbung von JFrame in einer Klasse entfernen Java Basics - Anfänger-Themen 5
W Vererbung, abstract und Konstruktoren Java Basics - Anfänger-Themen 30
J Vererbung und Methodenaufruf Java Basics - Anfänger-Themen 11
G Polymorphie, Vererbung, statischer Typ, Laufzeittyp Java Basics - Anfänger-Themen 2
H Vererbung mit private instanzvariablen Java Basics - Anfänger-Themen 9
S Vererbung Funktionsweise Code zur Vererbung Java Basics - Anfänger-Themen 1
C Methoden Vererbung private Attribute/public Methoden Java Basics - Anfänger-Themen 4
S Verständnis Vererbung Java Basics - Anfänger-Themen 3
D JavaFX Vererbung Java Basics - Anfänger-Themen 2
U Vererbung Generizität und Vererbung Java Basics - Anfänger-Themen 4
A Vererbung bei Klassen mit Objekt der Klasse im Konstruktor Java Basics - Anfänger-Themen 4
K Vererbung Octagon von Circle Java Basics - Anfänger-Themen 0
B Hilfe bei Vererbung Java Basics - Anfänger-Themen 2
D Vererbung Frage zum Klassenaufbau mit Vererbung Java Basics - Anfänger-Themen 1
T Vererbung und interface. Java Basics - Anfänger-Themen 1
S Gehaltsberechnung (Vererbung, abstrakte Methoden) Java Basics - Anfänger-Themen 6
S Vererbung Java Basics - Anfänger-Themen 1
F Vererbung in zwei Richtungen? Java Basics - Anfänger-Themen 14
D Vererbung / Polymorphie Java Basics - Anfänger-Themen 5
O Vererbung Java Basics - Anfänger-Themen 5
MiMa Vererbung Theorie OK, Praxis ?? Java Basics - Anfänger-Themen 4
Arif Vererbung Vererbung Variablen überschreiben Java Basics - Anfänger-Themen 1
C Vererbung - Ausgaben bestimmen Java Basics - Anfänger-Themen 6
S Vererbung Java Basics - Anfänger-Themen 10
L Setter und Getter/Vererbung Java Basics - Anfänger-Themen 6
C Konstruktoren und Vererbung Java Basics - Anfänger-Themen 2
J Kleinere Frage zur Vererbung/Objekterzeugung Java Basics - Anfänger-Themen 2
G Vererbung Java Basics - Anfänger-Themen 12
J Vererbung privater Variablen Java Basics - Anfänger-Themen 7
J Vererbung Vererbung von Methoden Java Basics - Anfänger-Themen 6
B Vererbung Java Basics - Anfänger-Themen 12
K Vererbung (super) Java Basics - Anfänger-Themen 2
A ArrayQueue mit Exceptions und Vererbung Java Basics - Anfänger-Themen 3
J Java: static bei Vererbung Java Basics - Anfänger-Themen 5
C Vererbung Java Basics - Anfänger-Themen 4
L Vererbung Java Basics - Anfänger-Themen 3
J Klassenorganisation | Vererbung Java Basics - Anfänger-Themen 1
B Vererbung Vererbung Java Basics - Anfänger-Themen 2
N Generics Vererbung Wildcard Interface Java Basics - Anfänger-Themen 8
A Benötige Hilfe bei Vererbung Java Basics - Anfänger-Themen 1
M Anfängerprobleme mit Vererbung Java Basics - Anfänger-Themen 27
J Vererbung Java Basics - Anfänger-Themen 9
F Vererbung von Attributen zwischen zwei Klassen Java Basics - Anfänger-Themen 6
J Konstruktor Problem bei Vererbung Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben