Eigenschaften außerhalb einer Klasse nicht sichtbar

Status
Nicht offen für weitere Antworten.

Cerberus81

Mitglied
Hallo zusammen.
Ich bereite hier gerade einige Praktikumsaufgaben für morgen vor, und komme irgendwie nicht so recht weiter.
Die Aufgabenstellung lautet:

a)
Definieren Sie einige geeignete Eigenschaften eines Rechtecks,
d.h. mit Daten, die z.B. Position, Länge, Breite und Farbe eines Rechtecks beschreiben.
Diese Eigenschaften sollen außerhalb der Klasse nicht sichtbar sein. Verwenden Sie hierzu den geeigneten Modifier.

b) Definieren Sie einige geeignete Methoden, z.B.
‐‐ zum Setzen der Eigenschaften des Rechtecks.
Diese Methoden sollen in allen Klassen im gleichen Ordner wie Rechteck sichtbar sein.

Folgendes habe ich bislang an Code:

Java:
/*
 * Die Werte eines Rechtecks sollen ausserhalb
 * seiner Klasse nicht sichtbar sein.
 */

/**
 * @version 1.0
 * @author Cerberus
 */
     class Dreieck_Zugriff {
                                      // Instanz-Variable
      private int laenge = 35;             // Attribute jeden Objektes
      private int breite = 56;             // dieser Klasse
      private String farbe = "Gelb";


        public static void main(String args[]) {

                                            // ein Objekt der Klasse
                                            // Dreieck_Zugriff erzeugen
            Dreieck_Zugriff S1;

            S1 = new Dreieck_Zugriff();

            System.out.println(S1);

            }
        

 }

Nun erhalte ich beim Kompilieren zwar keine Fehlermeldung, aber so richtig das, was gefragt ist, kommt auch nicht bei rum. Erstmal besteht die Ausgabe aus wirren Zeichen, dann erfolgt die Ausgabe immer, abhängig davon, ob ich die Werte auf "private" stehen habe oder nicht, und wo die Methoden, die b) verlangt, konkret reingeschrieben werden müssen, verstehe ich auch nicht so richtig.

Falls jemand einen Tipp für mich hat, wäre ich sehr froh.
 

eRaaaa

Top Contributor
private ist schon richtig, das sagt aus, dass die attribute nur dieser klasse zur verfügung stehen.
nun sollst du aber methoden schreiben, so dass auch andere klassen darauf zugreifen können (setzen oder auslesen). das nennt man getter + setter:
Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 6.2.6 Setter und Getter nach der JavaBeans-Spezifikation

da diese aber auch nur im gleichen ordner/package vefügbar sein sollen, brauchst du den entsprechenden modifizierer bzw, vllt auch garkeinen ;D

Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 6.2 Privatsphäre und Sichtbarkeit
 

Cerberus81

Mitglied
Okay, also verstehe ich das insofern richtig?

1. Ich lege eine Klasse mit den durch "private" geschützten Attributen an.

2. Ich lege die "main" Klasse an und erstelle ein Objekt, dass die geschützten Attribute der vorherigen Klasse enthält.

So habe ich es ja bislang gemacht.

Und nun, erstelle ich

3. Eine weitere Klasse, in der Methoden definiert werden, die beispielsweise die geschützten Attribute mit neuen Werten überschreiben können, ja?

Wenn ich das vom Prinzip her richtig verstanden habe, weiß ich aber trotzdem nicht so recht, wie ich diese neue Klasse nun anlegen soll. Als seperates File? Und wieso haben wir in der Vorlesung überhaupt erst in der "main" Klasse dieses Objekt mit den Attributen angelegt, wenn ich dann von dort aus eh nichts weiter mehr mache?
Das ist bei mir grad eher ein generelles Verständnisproblem, was den Aufbau der Aufgabe angeht.
 

eRaaaa

Top Contributor
ne ne, das kommt alles in eine klasse !

vergiss erstmal die main methode, und das erstellen des objekte (das ist ja auch garnicht die aufgabe!!)

du hast 3 privat deklarierte attribute (hier solltest du auch die initialisierung weglassen eig.)

Java:
private int laenge;
private int breite;
private String farbe;  // vllt hier sogar anstatt string, Color benutzen, aber will dich nicht verwirren ;D

normal hat eine klasse dann auch einen konstruktor (um dann die explizit werte setzen zu können)
Java:
public Dreieck_Zugriff(int laenge, int breite, String farbe){
this.laenge = laenge;
this.breite = breite;
this.farbe = farbe;
}

aber auch das soll dich nicht weiter verwirren, deine eigentliche aufgabe kommt nämlich jetzt:
damit nun andere klassen im gleichen ordner die werte eines Dreieck_Zugriff - objekts (der klasse solltest du vllt einen anderen namen geben ;D ) verändern kann, oder diese auslesen kann, brauchst du methoden dafür(irgendwie wiederhole ich mich ;D )

Java:
int getLaenge(){
return this.laenge;
}

void setLaenge(int neueLaenge){
this.laenge = neueLaenge;
}

//usw. (halt noch für die anderne paramter)

nu hab ich dir fast alles durchgekaut ;(
lies dich lieber nochmal ein (die links oben sollten dir helfen)

hier nochmal modifier im überblick: Java Modifiers

gruß
 
Zuletzt bearbeitet:

Cerberus81

Mitglied
Ja, langsam wird es verständlicher. Ich setze mich nochmal in Ruhe dran jetzt.
Vielen Dank für deine Tipps, die haben mir jetzt erstmal weitergeholfen.
 

Cerberus81

Mitglied
Also, ich habe das jetzt ersteinmal so gemacht, wie du es vorgeschlagen hast.

Nun muss ich aber doch trotzdem ein Objekt anlegen, so, wie ich es zuvor mit S1 gemacht hatte, oder?

Und das kommt dann in die Klasse "main"?

Entschuldige, ich weiß, ich bin nervig, aber irgendwie fehlt mir hier gerade der Überblick. Die Attribute müssen ja auch noch initialisiert werden. Im Moment sind sie ja wertelos.

So sieht der Code jetzt aus:

Java:
/*
 * Die Werte eines Rechtecks sollen ausserhalb
 * seiner Klasse nicht sichtbar sein.
 */

/**
 * @version 1.0
 * @author Cerberus
 */
     class Dreieck_Zugriff {
                                      // Instanz-Variable
      private int laenge;             // Attribute jeden Objektes
      private int breite;             // dieser Klasse
      private String farbe;



    public Dreieck_Zugriff(int laenge, int breite, String farbe) {

    this.laenge = laenge;
    this.breite = breite;
    this.farbe = farbe;
    }

    
    int getlaenge() {
        return this.laenge;
    }


    void setlaenge(int neuelaenge) {

    this.laenge = neuelaenge;

     }
    
      }
 

function

Bekanntes Mitglied
Du kannst jetzt ein Objekt von Dreieck_Zugriff in einer anderen Klasse erzeugen, dabei werden dann auch die variablen initialisiert im Konstruktor. Die einzelnen werte kannst du dann über die getter/setter methoden abrufen bzw ändern.
 

eRaaaa

Top Contributor
grml :)

also zuerst einmal ist main keine klasse, sondern eine methode (zumindestens wenn wir vom selben main reden :) )

zweitens: jetzt hast du ja nur 1:1 abgeschrieben was ich scho gepostet habe, was ist mit dne anderen 2 attributen? dafür brauchst du auch noch getter+setter , also nochmal 4 methoden.

dann bist du mit der klasse soweit fertig ja :)

wenn du dann willst, könntest du eine main methode shcreiben, entweder in einer neuen, oder in der selben klasse:
Java:
public static void main(String[] args){
Dreieck_Zugriff dreieck = new Dreieck_Zugriff(35,56,"Gelb");
}

dann hättest du ein objekt deiner klasse erstellt. darauf kannst du dann die methoden anwenden:
z.b.
Java:
dreieck.setLaenge(20); // um die länge zu verändern
usw.

um auch noch gleich auf deine anfangsfrage einzugehen:

bei System.out.println(S1); , bzw jetzt würde es ja heißen
System.out.println(dreieck);

kommen so komische ausgaben, weil deine klasse(nicht nur deine, sondern alle java klassen) von der oberklasse Object erben, und die eine methode toString() hat, welche IMMER von dem println automatisch aufgerufen wird auf einem objekt.
und weil du diese methode nicht überschreibst, wird automatisch die methode aus object aufgerufen(kannst du noch folgen? ;D )
diese ist so implementiert, dass sie den klassennamen + @ + einen hashcode ausgibt.

wenn du eine vernünftige ausgabe haben möchtest bei
System.out.println(dreieck);
musst du diese methode überschreiben und dort einens tring zurückgeben, der dich bei der ausgabe interessiert
z.b.:
Java:
@Override 
  public String toString() 
  { 
    return this.laenge+" "+this.breite+" "+this.farbe;
  }

puh :D
auch hier wieder einen link(auch wenn du anscheinend diese garnicht liest ;D ) :
Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 10.2 Object ist die Mutter aller Klassen

gruß
 

Cerberus81

Mitglied
Vielen, vielen Dank für deine Mühen. Doch, ich habe mir beide Links vorhin durchgelesen. Mein Problem war einfach, dass ich die Übersicht verloren hatte, was nun in welche Klasse gehört und warum. Jetzt verstehe ich das auch endlich mit der Main Methode.
Von nun an sollte ich es schaffen.
Danke euch beiden nochmal!
 

Cerberus81

Mitglied
Eine letzte Sache noch: Ich habe jetzt alle Methoden für die Attribute geschrieben, und das scheint auch soweit zu laufen.

Nur mit der Ausgabe harpert es noch. Der Code sieht nun folgendermaßen aus:

Java:
/*
 * Die Werte eines Rechtecks sollen ausserhalb
 * seiner Klasse nicht sichtbar sein.
 */

/**
 * @version 1.0
 * @author Cerberus
 */
     public class Dreieck_Zugriff {
                                      // Instanz-Variable
      private int laenge;             // Attribute jeden Objektes
      private int breite;             // dieser Klasse
      private String farbe;



    public Dreieck_Zugriff(int laenge, int breite, String farbe) {

    this.laenge = laenge;
    this.breite = breite;
    this.farbe = farbe;
    }


     int getlaenge() {
        return this.laenge;
    }

    void setlaenge(int neuelaenge) {

        this.laenge = neuelaenge;
    }
    
     int getbreite() {
         return this.breite;
     }

     void setbreite(int neuebreite) {
         
         this.breite = neuebreite;
     }

     String getfarbe() {
         return this.farbe;
     }

     void setfarbe(String neuefarbe) {
    
         this.farbe = neuefarbe;
     }



     public static void main(String args[]) {

     Dreieck_Zugriff dreieck = new Dreieck_Zugriff(35, 56, "Gelb");

     
        public String toString() {

            return this.laenge+" "+this.breite+" "+this.farbe;
        }
    }
 
Zuletzt bearbeitet von einem Moderator:

Cerberus81

Mitglied
Eine letzte Sache noch: Ich habe jetzt alle Methoden für die Attribute geschrieben, und das scheint auch soweit zu laufen.

Nur mit der Ausgabe harpert es noch. Der Code sieht nun folgendermaßen aus:

Java:
/*
 * Die Werte eines Rechtecks sollen ausserhalb
 * seiner Klasse nicht sichtbar sein.
 */

/**
 * @version 1.0
 * @author Cerberus
 */
     public class Dreieck_Zugriff {
                                      // Instanz-Variable
      private int laenge;             // Attribute jeden Objektes
      private int breite;             // dieser Klasse
      private String farbe;



    public Dreieck_Zugriff(int laenge, int breite, String farbe) {

    this.laenge = laenge;
    this.breite = breite;
    this.farbe = farbe;
    }


     int getlaenge() {
        return this.laenge;
    }

    void setlaenge(int neuelaenge) {

        this.laenge = neuelaenge;
    }
    
     int getbreite() {
         return this.breite;
     }

     void setbreite(int neuebreite) {
         
         this.breite = neuebreite;
     }

     String getfarbe() {
         return this.farbe;
     }

     void setfarbe(String neuefarbe) {
    
         this.farbe = neuefarbe;
     }



     public static void main(String args[]) {

     Dreieck_Zugriff dreieck = new Dreieck_Zugriff(35, 56, "Gelb");

     
        public String toString() {

            return this.laenge+" "+this.breite+" "+this.farbe;
        }
    }
 

eRaaaa

Top Contributor
hehe, ne ne so nicht, der teil mit der toString()
Java:
        public String toString() {
 
            return this.laenge+" "+this.breite+" "+this.farbe;
        }

darf natürlich nicht in einer m,ethode stehen, also nicht in die main!!! die toString ist ja selbst auch ganz einfach eine methode, die gehört zu de rklasse, so wie deine anderen methoden(setter+getter) auch.

also schreib den block über deine main, bzw unter setfarbe ( hier solltest du übrigens so eine schreibweise angewöhnen: setFarbe(..) )

und wenn du das hast, kannst du wieder mit System.out.println(dreieck); (das kommt wieder in die main)
dein dreieck ausgeben und es sollte eine lesbare ausgabe erscheinen ;D

gruß
 

Schumi

Bekanntes Mitglied
Ganz kleiner Tip zur Konvention noch am Rande. Getter und Setter immer mit großem Attributsanfangsbuchstaben schreiben: setFarbe(), getFarbe() usw. (Hatte eRaaaa (Anzahl 'a' korrekt?) in seinen Beispielen auch immer so gemacht.)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
laxla123 Eigenschaften eines Algorithmus (determiniert vs.. deterministisch) Java Basics - Anfänger-Themen 2
Lion.King Ausgabe mit Eigenschaften Java Basics - Anfänger-Themen 4
Y Suche von Studenten anhand Ihrer Eigenschaften. Java Basics - Anfänger-Themen 1
A Auf Eigenschaften von Objekten anderer Klassen zugreifen Java Basics - Anfänger-Themen 5
E Eigenschaften Werte, in einer anderen Klasse, zuweisen Java Basics - Anfänger-Themen 40
I Eigenschaften von Position aus anderer Klasse übernehmen Java Basics - Anfänger-Themen 17
r4w Eigenschaften aus Objekt einer Liste holen Java Basics - Anfänger-Themen 3
M Eigenschaften einer Datei auslesen Java Basics - Anfänger-Themen 5
T Methoden und ihre Eigenschaften Java Basics - Anfänger-Themen 5
D Eigenschaften eines Objektes ändern Java Basics - Anfänger-Themen 1
S Ein Graphics Obejct mehrmals mit denselben Eigenschaften zeichnen lassen?!?!? Java Basics - Anfänger-Themen 4
S OOP Klasse mit static-Eigenschaften - HashMap füllen Java Basics - Anfänger-Themen 6
K Eigenschaften Definieren für Produkte in einer Klasse Java Basics - Anfänger-Themen 6
2 Klassen Eigenschaften eines Objektes an ein Unterobjekt übergeben Java Basics - Anfänger-Themen 6
Kenan89 JMenu Eigenschaften Java Basics - Anfänger-Themen 7
L eingegebene Strings nache Eigenschaften durchsuchen. Java Basics - Anfänger-Themen 25
D Zylinder/Eigenschaften (auf Größe) vergleichen Java Basics - Anfänger-Themen 16
E Reguläre Ausdrücke mit sehr variablen Eigenschaften Java Basics - Anfänger-Themen 2
Z OOP Probleme bei den Veto-Eigenschaften von Listenern Java Basics - Anfänger-Themen 8
A Zugriff auf andere Klass und die Eigenschaften Java Basics - Anfänger-Themen 17
buntuswalus OOP Überschreiben von Eigenschaften Java Basics - Anfänger-Themen 8
W Algorithmen und Eigenschaften Java Basics - Anfänger-Themen 29
JFeel-x JComponent<-----Eigenschaften<-- Als Liste abfragen? Java Basics - Anfänger-Themen 8
G Tab Eigenschaften Java Basics - Anfänger-Themen 2
S Übersicht der Eigenschaften von Klassen Java Basics - Anfänger-Themen 8
P Eigenschaften eines Buttons ändern Java Basics - Anfänger-Themen 6
T Klasse mit Eigenschaften Java Basics - Anfänger-Themen 2
D Objekten ihre Eigenschaften zuweisen Java Basics - Anfänger-Themen 3
B eigenschaften eines objekt kopieren. how? Java Basics - Anfänger-Themen 8
G elemente in einem vektor nach ihren eigenschaften sortieren Java Basics - Anfänger-Themen 2
W Berechnung verschiedener Eigenschaften von Geraden Java Basics - Anfänger-Themen 4
G Nichtfunktionale Eigenschaften: Java Programm Java Basics - Anfänger-Themen 31
MarvinsDepression Umgebungsvariable kann Java-Applikationen außerhalb der IDE nicht starten Java Basics - Anfänger-Themen 4
B Zugriffsmodifier, Zugriff außerhalb Package Java Basics - Anfänger-Themen 5
M String außerhalb der main-Methode Java Basics - Anfänger-Themen 4
L Buttons außerhalb der sichtbaren Activity Java Basics - Anfänger-Themen 8
C Variablen in Schleifen außerhalb verwenden Java Basics - Anfänger-Themen 2
G Wie rufe ich eine Methode außerhalb eines Projektes auf? Java Basics - Anfänger-Themen 18
U Properties außerhalb des war-Files Java Basics - Anfänger-Themen 1
P Auf Button-Klick außerhalb der GUI-Klasse reagieren Java Basics - Anfänger-Themen 10
S Methode außerhalb der Klasse definieren Java Basics - Anfänger-Themen 5
M Variablen Zugriff von außerhalb eines Blockes auf eine Variable innerhalb eines Blockes Java Basics - Anfänger-Themen 2
N Files außerhalb eines des jar-files einlesen mac Java Basics - Anfänger-Themen 10
H Enum außerhalb einer Klasse? Java Basics - Anfänger-Themen 2
P Methode außerhalb der Klasse aufrufen Java Basics - Anfänger-Themen 10
F APP außerhalb von Netbeans starten Java Basics - Anfänger-Themen 2
R Switch Werte außerhalb verwenden Java Basics - Anfänger-Themen 2
W Außerhalb auf Variable zugreifen Java Basics - Anfänger-Themen 36
S Zugriff auf Klasse/Methoden außerhalb eines Projektordners einschränken Java Basics - Anfänger-Themen 5
P Unterschied JRE innerhalb/ außerhalb des JDK Verzeichnisses? Java Basics - Anfänger-Themen 5
Q Zeichnen außerhalb der paint-methode Java Basics - Anfänger-Themen 7
J Java-Klassen außerhalb von Eclipse debuggen Java Basics - Anfänger-Themen 7
G mousemove außerhalb des fensters Java Basics - Anfänger-Themen 9
M ActionListener außerhalb des EDT ausführen Java Basics - Anfänger-Themen 2
R Eclipse Run Configuration von außerhalb starten Java Basics - Anfänger-Themen 2
M Effizienter Variablen außerhalb einer Schleife zu deklarieren? Java Basics - Anfänger-Themen 1
R Mausposition außerhalb des SWING Fensters Java Basics - Anfänger-Themen 2
G Protected Variablen außerhalb der eigenen Klassenhierarchie sichtbar Java Basics - Anfänger-Themen 5
G Wieso enum Declaration nur außerhalb einer Methode möglich? Java Basics - Anfänger-Themen 9
I double-Variable außerhalb des Try-Catch-Blocks nicht gültig Java Basics - Anfänger-Themen 2
T Jar: Zugriff auf Dateien inner- unter außerhalb d. jar-Files Java Basics - Anfänger-Themen 3
A dateireferenzierung innerhalb/außerhalb des archivs Java Basics - Anfänger-Themen 2
G Warum nur initialisierungen außerhalb von Methoden Java Basics - Anfänger-Themen 12
X Malen außerhalb der paint() Methode Java Basics - Anfänger-Themen 4
R Klasse aus Packet kann nicht außerhalb zugreifen Java Basics - Anfänger-Themen 8
M Ausgabe einer ArrayList ensteht nur als Hashcode, nicht als Objekt Java Basics - Anfänger-Themen 16
D 2 ArrayListen gleich sortieren bzw. eine Liste anhand einer anderen Sortieren Java Basics - Anfänger-Themen 6
ixChronos Letzten 4 Ziffern einer großen Zahl ausgeben Java Basics - Anfänger-Themen 3
P Objekt einer Methode eines anderen Objektes übergeben Java Basics - Anfänger-Themen 5
L Variablenwerte aus einer Methode übergeben Java Basics - Anfänger-Themen 2
E Arrays in einer ArrayList miteinander vergleichen Java Basics - Anfänger-Themen 12
Simon16 Java ArrayListe von einer Klasse sortieren Java Basics - Anfänger-Themen 2
Shadowrunner Variablen Gibt es eine Möglichkeit die Ziffern/Stellen einer Zahl fest zu legen? Java Basics - Anfänger-Themen 3
D remove Object von einer Liste von Obejcts Java Basics - Anfänger-Themen 3
FunkyPhil94 Wert in einer Lambda Funktion erhöhen Java Basics - Anfänger-Themen 3
T Aufruf der Methode einer Oberklasse, wenn sie in der Unterklasse überschrieben ist. Polymorphie. Java Basics - Anfänger-Themen 2
B Kommunikation mit Seriellen Schnittstellen + Integration einer lib Java Basics - Anfänger-Themen 1
A Daten aus einer HashMap aus einer DB speichern und mit neuen Werten vergleichen Java Basics - Anfänger-Themen 8
P Welches SDK für das erstellen einer ausführbaren Datei? Java Basics - Anfänger-Themen 4
D Länge einer Liste aufrufen. Java Basics - Anfänger-Themen 19
J Klassen Instanzen einer Klasse in einer anderen unabhängigen Klasse nutzen Java Basics - Anfänger-Themen 4
B Alle Strings bis zu einer Maimallänge aufzählen, die Bedingung erfüllen Java Basics - Anfänger-Themen 13
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
Soranix Erste Schritte Struktur als Anfänger // Von einer Klasse auf ein Objekt einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 6
MoxMorris Wie macht man String[] = String[] aus einer anderer Methode? Java Basics - Anfänger-Themen 18
T Fibonacci mit einer Hilfsmethode berechnen Java Basics - Anfänger-Themen 10
S Hilfe zu einer Aufgabe Java Basics - Anfänger-Themen 5
M Radius von einer ellipse bestimmen Java Basics - Anfänger-Themen 7
Say Fehlenden Code finden in einer while-Schleife? Java Basics - Anfänger-Themen 11
M Zufallszahl generieren mit einer linken und rechten Grenze Java Basics - Anfänger-Themen 3
N Was Passiert mit dem Namen einer Variable, wenn man diese einer Liste Hinzufügt Java Basics - Anfänger-Themen 16
_user_q Wie eine Methode/Funktion aus einer Klasse mit Constructor aufrufen? Java Basics - Anfänger-Themen 20
W String einer Textdatei in einzelne Stringobjekte pro Zeile aufteilen Java Basics - Anfänger-Themen 14
W Objekte einer ArrayList in txt-datei schreiben mit Paths? Java Basics - Anfänger-Themen 2
S Best Practice Fragen zu Projektstruktur einer Datenbank-Abfrage-App (MVC) Java Basics - Anfänger-Themen 13
T Variable von Objekten in einer Methode überprüfen Java Basics - Anfänger-Themen 26
nelsonmandela Problem bei Ausgabe einer Switch - Case Funktion Java Basics - Anfänger-Themen 5
S Textausgabe in einer For-Schleife Java Basics - Anfänger-Themen 12
M Spezifischen Wert einer Zeile aus .txt Datei entnehmen Java Basics - Anfänger-Themen 15
B Popups mit Klicksabfangen zumAusfüllen einer .ods Datei Java Basics - Anfänger-Themen 0

Ähnliche Java Themen

Neue Themen


Oben