Konstruktor für ein Objekt mit Zugriffsmethoden

Krischan

Mitglied
Hallo,

in einer Programmieraufgabe komme ich aktuell nicht weiter. Das Thema ist "Kapselung und Zugriffsmodifizierer ".

Die aktuelle Aufgabe lautet:

Fügen Sie der Box-Klasse einen neuen Konstruktor hinzu:
Box( Box alteBox )

Der Konstruktor erzeugt ein neues Box-Objekt mit genau den gleichen Dimensionen des übergebenen Box-Objekts alteBox.
Natürlich wird das alte Objekt nicht verändert.

Fügen Sie jetzt einige Zugriffsmethoden hinzu.
Eine Zugriffsmethode ist eine Methode, die verwendet werden kann, um auf
private Variablen (und andere Variablen) eines Objekts zuzugreifen:

public double getLaenge()
public double getHoehe()
public double getBreite()

Jede dieser Methoden gibt bloß den Wert einer Instanzvariablen zurück. Da das Objekt unveränderbar ist, gibt es keine Zugriffsmethode, um die Instanzvariablen zu ändern. Testen Sie Ihr Programm mit der geänderten Testklasse der vorherigen Aufgabe.

Hier stehe ich irgendwie auf dem Schlauch. Der Code "alteBox" in Box( Box alteBox ) ist für mich unverständlich. Kommt dort der Name für das Box Objekt rein, die ich in der main class erst erstelle?
Ich habe das mal versucht aber beim testen kommt immer 0 raus, weil der Code wohl doch nicht die Werte von box Objekt sich zieht.
Kann aber auch sein, dass ich die Zugriffsmethode nicht richtig verwende.

Hier ist der aktuell Code:

Java:
class Box
{
    // Variablen
    private double breite;
    private double länge;
    private double höhe;
    
    // Konstruktoen
    Box (double breite, double länge, double höhe)
    {
        this.breite = breite;
        this.höhe = höhe;
        this.länge = länge;
    }
    
    Box (double seite)
    {
        breite = seite;
        höhe = seite;
        länge = seite;
    }
    Box (Box altebox)
    {
        getLänge();
        getHöhe();
        getBreite();
    }
    
    // Methoden
        
    public double getLänge()
    {
        return länge;
    }
    public double getHöhe()
    {
        return höhe;
    }
    public double getBreite()
    {
        return breite;
    }
        public double berechneVolumen()
    {
        return breite * höhe * länge;
    }
    private double berechneOberflaecheVorn()
    {
        return breite * höhe;
    }
    private double berechneOberflaecheOben()
    {
        return breite * länge;
    }
    private double berechneOberflaecheSeitlich()
    {
        return höhe * länge;
    }
    public double berechneOberflaeche( )
      {
        return 2 * berechneOberflaecheVorn() +
               2 * berechneOberflaecheOben() +
               2 * berechneOberflaecheSeitlich() ;
      }
    
}

class BoxTester
{

  public static void main ( String[] args )
  {
    Box box = new  Box(2.5, 5.0, 6.0 );
    
     System.out.println( "Flaeche: "  + box.berechneOberflaeche( ) +
                         " Volumen: " + box.berechneVolumen( ) );

     System.out.println( "Laenge: " + box.getLänge() +
                         " Hoehe: " + box.getHöhe() +
                         " Breite: " + box.getBreite());
    
     Box boxneu = new Box(box);
    
     System.out.println( "Flaeche: "  + boxneu.berechneOberflaeche( ) +
             " Volumen: " + boxneu.berechneVolumen( ) );

     System.out.println( "Laenge: " + boxneu.getLänge() +
             " Hoehe: " + boxneu.getHöhe() +
             " Breite: " + boxneu.getBreite());
    
  }
}
 

krgewb

Top Contributor
Folgendes hat keine Wirkung:
Java:
    Box (Box altebox)
    {
        getLänge();
        getHöhe();
        getBreite();
    }
Probier
Java:
    Box (Box altebox)
    {      
        this.breite = alteBox.getBreite();
        this.höhe = alteBox.getHöhe();
        this.länge = alteBox.getLänge();
    }
 

Robat

Top Contributor
Du solltest dir die Aufgabe in 2 Teile zerlegen.
Code:
1. Teil:
Fügen Sie der Box-Klasse einen neuen Konstruktor hinzu:
Box( Box alteBox )

Der Konstruktor erzeugt ein neues Box-Objekt mit genau den gleichen Dimensionen des übergebenen Box-Objekts alteBox.
Natürlich wird das alte Objekt nicht verändert.
Hier sollst du einen Kopierkonstruktor erstellen. Dieser Konstruktor soll ein Box Objekt bekommen und dessen Werte (breite, länge, höhe) in das neue Objekt kopieren. Dafür kannst du dir deinen ersten Konstruktor zur Hilfe nehmen. Dieser bekommt die Zahlen einfach übergeben und setzt sie in die entsprechenden Instanzvariablen.
Java:
this.breite = breite;
this.höhe = höhe;
this.länge = länge;
Beim Kopierkonstruktor musst du prinzipiell genau das selbe machen. Nur kommen die Werte diesmal nicht vom Konstruktor selbst sondern vom übergebenen Box Objekt. Auf die Werte kannst du dann über die Getter altebox.getBreite() zugreifen. (würde auch direkt über die Instanzvariablen funktionieren altebox.breite)

Den 2. Teil mit den Getter-Methoden hast du ja bereits umgesetzt. Diese benötigst du für den ersten Teil um dir die Werte aus der übergebenen Box zu holen.
 

mihe7

Top Contributor
Der Code "alteBox" in Box( Box alteBox ) ist für mich unverständlich. Kommt dort der Name für das Box Objekt rein, die ich in der main class erst erstelle?
alteBox ist einfach der Name des Parameters, mit dem Du innerhalb des Konstruktors arbeitest. Unmittelbar davor steht der Typ des Parameters, hier also Box. Welchen Namen Du dem Parameter gibst, ist nur innerhalb des Konstruktors interessant und hat nichts mit dem Namen der Variable zu tun, die an den Konstruktor als Parameter übergeben wird.

Java:
public class Person {
    private String name;
    public Person(String einName) {
        this.name = einName; // nur innerhalb des Konstruktors ist "einName" bekannt
    }
}

public class Main {
    public static void main(String[] args) {
        new Person("XYZ"); // hier wird ein String-Literal übergeben
        String somebodiesName = "Hans Dampf";
        new Person(somebodiesName); // hier wird eine Variable vom Typ String übergeben
    }
}
 

Krischan

Mitglied
Folgendes hat keine Wirkung:
Java:
    Box (Box altebox)
    {
        getLänge();
        getHöhe();
        getBreite();
    }
Probier
Java:
    Box (Box altebox)
    {     
        this.breite = alteBox.getBreite();
        this.höhe = alteBox.getHöhe();
        this.länge = alteBox.getLänge();
    }

Ah da war ich ja gar nicht mal soweit weg. In einigen Versuchen hatte ich bereits sowas wie "this.breite = getBreite();" .


alteBox ist einfach der Name des Parameters, mit dem Du innerhalb des Konstruktors arbeitest. Unmittelbar davor steht der Typ des Parameters, hier also Box. Welchen Namen Du dem Parameter gibst, ist nur innerhalb des Konstruktors interessant und hat nichts mit dem Namen der Variable zu tun, die an den Konstruktor als Parameter übergeben wird.

Java:
public class Person {
    private String name;
    public Person(String einName) {
        this.name = einName; // nur innerhalb des Konstruktors ist "einName" bekannt
    }
}

public class Main {
    public static void main(String[] args) {
        new Person("XYZ"); // hier wird ein String-Literal übergeben
        String somebodiesName = "Hans Dampf";
        new Person(somebodiesName); // hier wird eine Variable vom Typ String übergeben
    }
}

Verstehe. Danke für die Erklärung.
 

Krischan

Mitglied
In einer Folgeaufgabe soll jetzt mit einer Methode eine Box erzeugt werden, die 25% größer ist als eine gegebene Box.

Meine Methode sieht wie folgt aus.

Java:
public Box großeBox()
    {
        return new Box(1.25* breite, 1.25* hoehe, 1.25* laenge);
        
    }

um es zu testen folgenden Code:
Java:
box.großeBox();
    
     System.out.println( "Flaeche: "  + box.berechneOberfläche( ) +
             " Volumen: " + box.berechneVolumen( ) );

     System.out.println( "Laenge: " + box.getlaenge() + " Hoehe: " + box.gethoehe() + " Breite: " + box.getbreite() )  ;

Funktionieren tut es nicht, da es mir die normalen Werte zurückgibt und nicht die um 25% gesteigerten. Ich weiß jetzt nicht genau ob die Methode "großeBox()" falsch ist oder ob die Methoden zum berechnen der Oberfläche und des Volumens weiterhin auf die Standartwerte zugreifen egal wie groß die neue Box ist.

hier der Komplette Code:
Java:
class Box
{    // Instanzvariablen
     private double breite;
     private double hoehe;
     private double laenge;
     private double seite;
    
    // Kontruktoren
    Box (double breite, double hoehe, double laenge)
    {
        this.breite = breite;
        this.hoehe = hoehe;
        this.laenge = laenge;
    }
    
    Box (double seite)
    {
        breite = seite;
        hoehe = seite;
        laenge = seite;
    }
    
    Box (Box altebox)
    {
        this.breite = altebox.getbreite();
        this.hoehe = altebox.gethoehe();
        this.laenge = altebox.getlaenge();
    }
    
    // Methoden
    public double berechneVolumen()
    {
         return (breite * hoehe * laenge);
    }
    public double berechneOberfläche()
    {
        return 2* ((breite * hoehe) + (breite * laenge) + (hoehe * laenge));
    }
    public double gethoehe()
    {
        return hoehe;
    }
    public double getlaenge()
    {
        return laenge;
    }
    public double getbreite()
    {
        return breite;
    }
    public Box großeBox()
    {
        return new Box(1.25* breite, 1.25* hoehe, 1.25* laenge);
        
    }
}

class BoxTester
{

  public static void main ( String[] args )
  {
    
    
      
     Box box = new Box( 2.5, 5.0, 6.0 ) ;

     System.out.println( "Flaeche: "  + box.berechneOberfläche( ) +
                         " Volumen: " + box.berechneVolumen( ) );

     System.out.println( "Laenge: " + box.getlaenge() + " Hoehe: " + box.gethoehe() + " Breite: " + box.getbreite() )  ;
    
     Box kopiertebox = new Box(box);
    
     System.out.println( "Flaeche: "  + kopiertebox.berechneOberfläche( ) +
             " Volumen: " + kopiertebox. berechneVolumen( ) );

     System.out.println( "Laenge: " + kopiertebox.getlaenge() + " Hoehe: " + kopiertebox.gethoehe() + " Breite: " + kopiertebox.getbreite() )  ;
  
     box.großeBox();
    
     System.out.println( "Flaeche: "  + box.berechneOberfläche( ) +
             " Volumen: " + box.berechneVolumen( ) );

     System.out.println( "Laenge: " + box.getlaenge() + " Hoehe: " + box.gethoehe() + " Breite: " + box.getbreite() )  ;
    
    
  }
}
 

mrBrown

Super-Moderator
Mitarbeiter
Ich weiß jetzt nicht genau ob die Methode "großeBox()" falsch ist oder ob die Methoden zum berechnen der Oberfläche und des Volumens weiterhin auf die Standartwerte zugreifen egal wie groß die neue Box ist.
Weder noch :)

Du rufst box.großeBox(); auf, wirst aber die Box, die du da zurück bekommt, direkt wieder weg, und rufst die weitere Methoden auf der alten Box auf
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
frager2345 Java Singleton Muster -> Methode für Konstruktor mit Parametern Java Basics - Anfänger-Themen 3
kxrdelis Konstruktor für ein Rechtwinkliges Dreieck Java Basics - Anfänger-Themen 10
L Konstruktor für eine Map-Datei/Map-Datei einlesen Java Basics - Anfänger-Themen 5
P Werte für Konstruktor vorschlagen Java Basics - Anfänger-Themen 4
T Konstruktor für eigene Klasse erstellen Java Basics - Anfänger-Themen 6
W Null-Pointer trotz Konstruktor? Java Basics - Anfänger-Themen 9
M Konstruktor-Aufruf im Konstruktor, aber nicht am Anfang? Java Basics - Anfänger-Themen 4
T Schlüsselworte Schlüsselwort this im Konstruktor Java Basics - Anfänger-Themen 3
frager2345 Warum muss ich hier im Konstruktor meine Exeption nicht abfangen ? Java Basics - Anfänger-Themen 4
J Konstruktor Java Basics - Anfänger-Themen 18
G Welche Attribute kommen in den Konstruktor? Java Basics - Anfänger-Themen 5
M wird der Konstruktor nicht als 1. ausgeführt? Java Basics - Anfänger-Themen 13
G Konstruktor und update Java Basics - Anfänger-Themen 4
K Kopier-Konstruktor Java Basics - Anfänger-Themen 6
S Default Konstruktor Java Basics - Anfänger-Themen 7
M Konstruktor ohne Übergabe eines Wertes Java Basics - Anfänger-Themen 7
M Wie kann ich in einem Konstruktor die Methode eines anderen Interfaces mit den jeweiligen Parametern aufrufen? Java Basics - Anfänger-Themen 8
J Vier gewinnt in Java,Spieler Konstruktor Java Basics - Anfänger-Themen 8
Zeppi OOP Bruch kürzen im Konstruktor Java Basics - Anfänger-Themen 2
HorstSchröder Konstruktor mit Initialwert Java Basics - Anfänger-Themen 1
C Konstruktor ab serialisiertem Objekt Java Basics - Anfänger-Themen 4
J Input/Output Konstruktor ergänzen, der zur Datei mit einem Objekt passt Java Basics - Anfänger-Themen 0
InfinityDE Problem mit Datenübergabe an Konstruktor Java Basics - Anfänger-Themen 7
B Konstruktor mit Array als Parameter Java Basics - Anfänger-Themen 3
G Variablen Array Länge über den Konstruktor definieren Java Basics - Anfänger-Themen 4
C Interface und Konstruktor Java Basics - Anfänger-Themen 1
H Generische Konstruktor Java Basics - Anfänger-Themen 12
MiMa Seltsames Verhalten im Konstruktor Java Basics - Anfänger-Themen 6
S Konstruktor passt nicht zum Rest Java Basics - Anfänger-Themen 11
C Unbekannter "Konstruktor"?? Java Basics - Anfänger-Themen 10
W OOP Warenlager mit Array(Konstruktor, Methoden) Java Basics - Anfänger-Themen 39
R Objekt in Konstruktor ist nicht zulässig Java Basics - Anfänger-Themen 5
A Mit einer Methode den Konstruktor aufrufen? Java Basics - Anfänger-Themen 2
B Warum können super() und this() nicht gemeinsam in einem Konstruktor verwendet werden? Java Basics - Anfänger-Themen 7
H Unterschied Konstruktor und Klassenname x = new Klassenname; Java Basics - Anfänger-Themen 3
B Klassen Array Parameter im Konstruktor? Java Basics - Anfänger-Themen 4
E Konstruktor mit Methode Java Basics - Anfänger-Themen 7
E ArithmeticException im Konstruktor Java Basics - Anfänger-Themen 4
S Konstruktor, Objekte Java Basics - Anfänger-Themen 4
F Konstruktor richtig implementiert? Frage zu Benutzereingaben... Java Basics - Anfänger-Themen 9
W Typecastin im Konstruktor? Java Basics - Anfänger-Themen 2
A Variablen Variablenwert über Konstruktor ändern Java Basics - Anfänger-Themen 3
F Arrays im Konstruktor Java Basics - Anfänger-Themen 5
C Konstruktor mit und ohne Parameterliste Java Basics - Anfänger-Themen 13
L Instanzvariablen, Veerbung, Konstruktor Java Basics - Anfänger-Themen 32
E Best Practice Konstruktor mit bestehender Intanz der gleichen Klasse aufrufen Java Basics - Anfänger-Themen 4
E Plausibilitätsprüfung in dem Konstruktor mit Ausnahmebehandlung Java Basics - Anfänger-Themen 8
A Aufruf von Konstruktor , obwohl 2 Parameter weggelassen werden Java Basics - Anfänger-Themen 7
A Aufruf von Konstruktor , obwohl 2 Parameter weggelassen werden Java Basics - Anfänger-Themen 0
D Compiler-Fehler Konstruktor von Superklasse übernehmen Java Basics - Anfänger-Themen 1
P Counter im Konstruktor Java Basics - Anfänger-Themen 11
J toString-Methode in Verbindung mit varArgs-Konstruktor Java Basics - Anfänger-Themen 18
I Einträge in den Konstruktor Java Basics - Anfänger-Themen 3
Aprendiendo [JAVA-Syntax] (int... variable) bei einem Konstruktor Java Basics - Anfänger-Themen 8
J Superklassen Konstruktor Verständnisfrage Java Basics - Anfänger-Themen 1
G Int-Array im Konstruktor Parameter Java Basics - Anfänger-Themen 37
T Datentypen Warum mit Konstruktor Objektvariablen initalisieren? Java Basics - Anfänger-Themen 19
A Vererbung bei Klassen mit Objekt der Klasse im Konstruktor Java Basics - Anfänger-Themen 4
P Konstruktor. Java Basics - Anfänger-Themen 4
D Best Practice Objekt automatisch im Konstruktor füllen? Java Basics - Anfänger-Themen 9
D Objekt oder Konstruktor Java Basics - Anfänger-Themen 2
F Java default Konstruktor Java Basics - Anfänger-Themen 1
R Fragen über den Konstruktor Java Basics - Anfänger-Themen 0
T Konstruktor mit Referenzdatentypen Java Basics - Anfänger-Themen 5
H Klassen Konstruktor Parameter als Instanzvariablen zwischen speichern... Java Basics - Anfänger-Themen 11
T setter im Konstruktor einbauen? Java Basics - Anfänger-Themen 8
R ArrayList im Konstruktor. Java Basics - Anfänger-Themen 4
T Konstruktor Probleme Java Basics - Anfänger-Themen 3
J Wie lässt sich der Konstruktor einer Klasse einer Funktion einer Klasse nutzen. Java Basics - Anfänger-Themen 4
S Variable, die im Konstruktor gesetzt wird, wird nicht gefunden vom Compiler. Java Basics - Anfänger-Themen 4
C Generic im Konstruktor Java Basics - Anfänger-Themen 1
F Privater Konstruktor und statische Methoden Java Basics - Anfänger-Themen 4
W Konstruktor von FileInputStream nicht gefunden Java Basics - Anfänger-Themen 18
B Methoden Konstruktor im Konstruktor aufrufen Java Basics - Anfänger-Themen 2
N Aufgabe: Pizza Konstruktor mit mehreren beliebigen Durchmesser/Preiskombinationen Java Basics - Anfänger-Themen 8
K arraygröße durch variablen Konstruktor? Java Basics - Anfänger-Themen 7
K ArrayList in Konstruktor - wie späterer Zugriff Java Basics - Anfänger-Themen 2
G Verwendung von Konstruktor Java Basics - Anfänger-Themen 8
X Übergabeparameter Konstruktor (File) Java Basics - Anfänger-Themen 13
K Wieso muss man finale statische Variablen sofort oder eben im Konstruktor initialisieren? Java Basics - Anfänger-Themen 2
C Konstruktor in Abstrakten Klassen Java Basics - Anfänger-Themen 4
B Konstruktor Problem Java Basics - Anfänger-Themen 8
Joew0815 konstruktor und damit erstellte objekte Java Basics - Anfänger-Themen 1
K Hashtable mit eigenen Konstruktor Java Basics - Anfänger-Themen 2
S Java Fragen Konstruktor & Statische Methoden Java Basics - Anfänger-Themen 4
H Fehler im Konstruktor abfangen Java Basics - Anfänger-Themen 10
J Konstruktor Problem bei Vererbung Java Basics - Anfänger-Themen 1
I Java Eingabe aus einer anderen Klasse in eine andere an Konstruktor übergeben Java Basics - Anfänger-Themen 4
O Konstruktor und Default Konstruktor Java Basics - Anfänger-Themen 7
S Kapselung Objekt bei Übergabe an Konstruktor nicht initalisiert Java Basics - Anfänger-Themen 3
I Vererbung Frage zum Konstruktor Java Basics - Anfänger-Themen 5
Y Konstruktor - Setter/Getter Java Basics - Anfänger-Themen 3
P Konstruktor Java Basics - Anfänger-Themen 4
E Initialisierung von Attributen und Konstruktor Java Basics - Anfänger-Themen 0
H Compiler-Fehler NullPointerException bei .length, Konstruktor fehlerhaft? Java Basics - Anfänger-Themen 3
M Objekt Array an konstruktor übergeben und Initialisieren Java Basics - Anfänger-Themen 1
llabusch Vererbung Super Konstruktor Java Basics - Anfänger-Themen 5
P Erste Schritte WindowBuilder erstellt Konstruktor wie zugreifen Java Basics - Anfänger-Themen 5
M Parameter von Konstruktor, der Superklassen-Konstruktor aufruft Java Basics - Anfänger-Themen 2
V Was soll alles in den Konstruktor? Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben