public class -> public method -> variable private?

N

Netzgeist

Mitglied
Hallo,
ich versuche mich gerade im rudimentärem Verständnis objektorientierter Programmierung. Folgendes Problem verschliesst mir mein Weiterkommen:

Java:
// Myemm.java
public class Myemm {
    int a;
    int b;
    
    int addiere() {
        return a + b;
    }
}

Java:
// Hauptmenue.java
public class Hauptmenue {
    public static void main(String[] args) {
        Myemm foo = new Myemm();
        foo.a = 4;
        foo.b = 3;
        int erg = foo.addiere();
        System.out.println(erg);
    }
}

Beides ist kompilierbar und ausführbar. Checkstyle sagt mir jedoch, int a und int b müssen private sein. Warum erschliesst sich mir nicht. Wenn ich sie private setze kann ich sie nicht ausserhalb der Klasse deklarieren. Wenn ich das so mache versteh ich aber nicht wie ich ein Objekt der Klasse Myemm erzeugen kann, ohne das die Eigenschaften (wie hier int a) immer dieselben sind.

Danke für jeden Denkanstoß :)
 
G

Gast2

Gast
Um die Variablen von außen ändern zu können führt man in der Regel setter-Methoden ein, z.b.:

Java:
public void setA(int a) {
   this.a = a;
}
So kannst du nämlich den zugriff auf a kontrollieren. Wenn du keinen Zugriff auf a von außen zulassen möchtest lässt du den setter einfach weg.
Willst du sicherstellen dass a immer größer 0 ist macht du im setter einfach noch ne Abfrage.

Um an die privaten Variable wieder ranzukommen brauchst du getter:

Java:
public int getA() {
   return a;
}
 
R

Runtime

Top Contributor
Du kannst eine Methode definieren, um die Zahlen zu setzen:
Java:
// Myemm.java
public class Myemm {
    private int a;
    private int b;
    
    int addiere() {
        return a + b;
    }

    public void setA(int a) {
        this.a = a;
    }

    public void setB(int b) {
        this.b = b;
    }

}

Oder du kannst die Variablen im Kontruktor setzen:
Java:
// Myemm.java
public class Myemm {
    private int a;
    private int b;

    public Myemm(int a, int b) {
        this.a = a;
        this.b = b;
    }
    
    int addiere() {
        return a + b;
    }

}

edit:
War jemand schneller :D
 
N

Netzgeist

Mitglied
Ich fasse zusammen was ich glaube verstanden zu haben:

Es ist mir nicht möglich, ein erzeugtes Objekt einfach durch Zugriff auf seine Eigenschaften(Variablen) zu ändern(niemals?).
Stattdessen muss ich dem Objekt für jede einzelne Eigenschaft eine Methode schreiben, die diese Eigenschaft dann ändert.

Richtig? Dann habs ichs theoretisch jetzt verstanden - praktisch sobald ich das Kapitel über Konstruktoren durch hab :-]
 
B

bygones

Gast
Es ist mir nicht möglich, ein erzeugtes Objekt einfach durch Zugriff auf seine Eigenschaften(Variablen) zu ändern(niemals?).
möglich schon - wenn man eben die entsprechenden Zugriffsmodifikatoren (?) nutzt... also wenn du alles public machst kannste auch alles so ändern....
nur man sollte es nicht machen

Stattdessen muss ich dem Objekt für jede einzelne Eigenschaft eine Methode schreiben, die diese Eigenschaft dann ändert.
für jede Eigenschaft, die du ändern lassen willst... nicht automatisch für jede ist dies sinnvoll bzw nötig
 
G

Gast2

Gast
Es ist mir nicht möglich, ein erzeugtes Objekt einfach durch Zugriff auf seine Eigenschaften(Variablen) zu ändern(niemals?).
Doch das ist möglich, die Variablen müssen halt sichtbar sein. Schau dir mal public, protected, private, default an. Sollte in den Links oben auch stehen.
 
Der Müde Joe

Der Müde Joe

Top Contributor
>Zugriff auf seine Eigenschaften(Variablen) zu ändern(niemals?).

Doch. Machst du ja mit foo.a = 4. Du musst jedoch Zugriff darauf haben. siehe
Controlling Access to Members of a Class (The Java™ Tutorials > Learning the Java Language > Classes and Objects)

Wenn die Instanzvariablen öffentlich sind, kann das schnnell zum chaos führen. Darum benutzt man
meist getter und setter. Diese können evtl noch was retten. Evtl sind die Objekte auch etwas komplexer
und benutzen einen inneren Zustand, den andere nicht ändern sollten.

zb:
Java:
public class Add {

public int sum;

public Add(int a, int b) { this.sum = a+b;}

}

Da sum von a und b äbhängt, möchte man nicht, das diese Variable von aussen verändert wird. Darum wird der Access auf private getellt und kein setter gemacht.
 
N

Netzgeist

Mitglied
Ok. Ich "kann" also was ich eh schon gemacht hab und checkstyle meckert weil es "schlecht" ist. Nun weiss ich _warum_ es schlecht ist. Wird dann aber viel monotones runterhacken wenn 10 Objekte 10 beim erstellen individuell zu setzende Eigenschaften haben *schaut deprimiert*. Naja, Lehrjahre sind keine Herrenjahre. Danke euch :)
 
Final_Striker

Final_Striker

Top Contributor
Nicht umbedingt. Mit Entwicklungsumgebungen wie Eclipse oder Netbeans lassen sich die get/set-Methoden automatisch generieren.
 
N

Netzgeist

Mitglied
Hey toller Tip. Ich benutze Netbeans und konnte das recht schnell im Kontextmenü finden. Naja, zu Übungszwecken werde ich vorerst trotzdem alles abtippen. Danke euch allen und einen schönen Mittwoch :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Methoden Methoden einer public class AutoCompleteTextField verwenden Java Basics - Anfänger-Themen 14
C Was macht `public class ClassName<T extends Comparable<T>>`? Java Basics - Anfänger-Themen 14
Javafan01 Dateiname und Public class Java Basics - Anfänger-Themen 4
V Was bewirkt das Schlüsselwort extends in Verbindung mit class bzw. public class ? Java Basics - Anfänger-Themen 2
D neue public static class variablen in array speichern? Java Basics - Anfänger-Themen 6
T Wie vergleiche ich die Jahre aus der while Schleife die in ( public class) fuer cbx geschrieben sind Java Basics - Anfänger-Themen 5
O Was bedeutet public class value? Java Basics - Anfänger-Themen 3
K OOP Attribute von Klasse in die public class übertragen? Java Basics - Anfänger-Themen 7
StickToFreak Fehler mit public class Java Basics - Anfänger-Themen 13
StickToFreak public class problem ôÔ Java Basics - Anfänger-Themen 3
P immer "public class". ? Java Basics - Anfänger-Themen 4
J public class Java Basics - Anfänger-Themen 15
B Warum manchmal public class und manchmal nur class Java Basics - Anfänger-Themen 3
V public class aus einer anderen public class aufrufen? Java Basics - Anfänger-Themen 4
V public class lässt sich nicht erstellen Java Basics - Anfänger-Themen 2
G Public class??? Findet meine Klasse nicht. Java Basics - Anfänger-Themen 5
S public static boolean Java Basics - Anfänger-Themen 4
Vamecruft Compiler-Fehler public static void zu static String ändern Java Basics - Anfänger-Themen 2
S Wohin kommt das „abstract“? Vor oder nach „public“/ „private“ /... Java Basics - Anfänger-Themen 3
D public ArrayList(Collection<? extends E> c); Java Basics - Anfänger-Themen 2
G Klassen Mit fremder Klasse auf public Methode zugreifen Java Basics - Anfänger-Themen 23
C Methoden Vererbung private Attribute/public Methoden Java Basics - Anfänger-Themen 4
C Methoden Unterschied zwichen public int, public static int und public static void Java Basics - Anfänger-Themen 2
A Methoden Unterscheid zwischen public und ohne Java Basics - Anfänger-Themen 9
J Klasse wird als private erkannt obwohl sie public deklariert ist Java Basics - Anfänger-Themen 3
J Frage zu: public static void main (String[]args) Java Basics - Anfänger-Themen 1
L RSA Public Key einlesen Java Basics - Anfänger-Themen 0
K Public Attribute oder getter - funktioniert leider beides hier nicht Java Basics - Anfänger-Themen 5
I Methoden public void paintComponent (Graphics g) Java Basics - Anfänger-Themen 4
M public static int in ActionListener Java Basics - Anfänger-Themen 6
L Was genau macht "public static void" ? Java Basics - Anfänger-Themen 12
B ja ja schon wieder einer mit einer public static void main(string[] args) Frage... Java Basics - Anfänger-Themen 8
T Variablen Getter-Setter vs Public Variable? Java Basics - Anfänger-Themen 5
K modifier public Java Basics - Anfänger-Themen 3
W Klassen Fehler bei public void setLabelText(JLabel label, String text) Java Basics - Anfänger-Themen 11
D Klassenvariablen standardmäßig private oder public? Java Basics - Anfänger-Themen 2
T Java Code Hilfe - public void xxx() Java Basics - Anfänger-Themen 2
T public void - Problem Java Basics - Anfänger-Themen 10
B public/private nur 1x schreiben Java Basics - Anfänger-Themen 3
R public static void Rückgabe Java Basics - Anfänger-Themen 5
P Compiler-Fehler public static void main, Grundloses Problem Java Basics - Anfänger-Themen 4
N Java UML: Eine Frage zu public-Variablen Java Basics - Anfänger-Themen 19
P Erste Schritte public oder static oder wie? Java Basics - Anfänger-Themen 7
T public-private problem Java Basics - Anfänger-Themen 5
J public enum? in Java Java Basics - Anfänger-Themen 9
C Erste Schritte felder, die public final sind Java Basics - Anfänger-Themen 6
B main methode ohne public Java Basics - Anfänger-Themen 5
W Frage public protected konstruktor Java Basics - Anfänger-Themen 6
V public Variablen vs Getter + Setter Java Basics - Anfänger-Themen 4
S Frage zu public static Java Basics - Anfänger-Themen 29
J "public int x" - Zugriff von anderer Klasse (selbes Package) nicht möglich?! Java Basics - Anfänger-Themen 4
E Methoden public static void main(String[] args) Java Basics - Anfänger-Themen 9
I Methoden Problem If/Else; Public Void Java Basics - Anfänger-Themen 6
K Kapselung public / private verständis problem Java Basics - Anfänger-Themen 17
S Warum sind Attribute der Klasse java.awt.Point public? Java Basics - Anfänger-Themen 3
T Kapselung: public-Methoden in protected-Klassen Java Basics - Anfänger-Themen 3
F public variable erstellen, & darauf zugreifen Java Basics - Anfänger-Themen 12
B Variablen Variablen in try / catch "public" machen? Java Basics - Anfänger-Themen 3
X enum Fehlermeldung "The public type Day must be defined in its own file" Java Basics - Anfänger-Themen 8
B Public boolean einfügen Java Basics - Anfänger-Themen 12
R jLabel lässt sich nicht public setzen?? Java Basics - Anfänger-Themen 15
Hamstinator public static. Gute Idee? Java Basics - Anfänger-Themen 6
-horn- public static double[][][] NAME() nur per RETURN Wertrückgabe möglich? Java Basics - Anfänger-Themen 20
S Public-Klassen und Dateien Java Basics - Anfänger-Themen 5
K konstruktur als public definieren Java Basics - Anfänger-Themen 11
G field public/private wann Java Basics - Anfänger-Themen 11
H eine als public deklariete Variable wird nicht gefunden Java Basics - Anfänger-Themen 6
T Konstruktor mit oder ohne public-Bezeichner? Java Basics - Anfänger-Themen 4
T Geht so was? public void verkaufe (<X implements Produkt& Java Basics - Anfänger-Themen 8
J Public / Private Keys speichern bzw. lesen? Java Basics - Anfänger-Themen 8
A kein zugriff auf variable trotz public? Java Basics - Anfänger-Themen 3
C public static void main(String[] args) Java Basics - Anfänger-Themen 6
D Frage zu public static void main. Java Basics - Anfänger-Themen 4
N Wann muss eine Methode - protected sein wann public wann. Java Basics - Anfänger-Themen 5
G Vor oder hinter public static void main. ? Java Basics - Anfänger-Themen 8
G (Anfängerproblem) Problem mit dem Aufruf von public-Methoden Java Basics - Anfänger-Themen 3
O Unterschied zwischen static und public Java Basics - Anfänger-Themen 2
D Zugriff auf attribut anderer Klasse privat/public? Java Basics - Anfänger-Themen 9
A Javadoc nur bei public Klassen? Java Basics - Anfänger-Themen 3
T rotes herz public void paint(Graphics g) Java Basics - Anfänger-Themen 2
G Was ist public static void main(String[] args)? Java Basics - Anfänger-Themen 12
P public enum ";"expected Java Basics - Anfänger-Themen 7
B public und protected Java Basics - Anfänger-Themen 11
G <identifier> expected bei public void final Java Basics - Anfänger-Themen 3
G GUI Controls private oder public Java Basics - Anfänger-Themen 6
G Variablen public oder private? Java Basics - Anfänger-Themen 9
R public Klassen Java Basics - Anfänger-Themen 12
I public Verständnisfrage Java Basics - Anfänger-Themen 5
S private public Java Basics - Anfänger-Themen 5
R private / public Frage Java Basics - Anfänger-Themen 7
F Warum sind Interface-Methoden public? Java Basics - Anfänger-Themen 19
C public void keyPressed(KeyEvent e) Java Basics - Anfänger-Themen 2
G Public ,private,protected Java Basics - Anfänger-Themen 1
N public void und verhalten bei return Java Basics - Anfänger-Themen 2
K public boolean contains (Object obj) > true or false Java Basics - Anfänger-Themen 16
M public static void main(String... args)<- Was bedeutet das? Java Basics - Anfänger-Themen 5
A public/private/etc. Zusatz weglassen Java Basics - Anfänger-Themen 2
A die public static void main ? Java Basics - Anfänger-Themen 3
C Java-Anfang main void public? Java Basics - Anfänger-Themen 5
M public Methoden in Interfaces Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Anzeige

Neue Themen


Oben