Class scope und Instance scope und Getter nur selbstgeschrieben Methoden

Say

Aktives Mitglied
Class scope: die Variable ist unveränderlich und besitzt den gleichen Wert
Instance scope: die Variable ist veränderlich bei jeder Instanz?

Warum kann equals direkt auf radius (Zeile 8) zugreifen ohne einen Getter? Braucht es den Getter nur dann, wenn man eine Methode selbstgeschrieben hat und bei Java Methoden nicht?

Java:
class Disk
{
private int radius;
public Disque(int oneRadius) {
radius = oneRadius;
}
boolean equals(Disk o) {
return radius == o.radius;
}
}
class equals
{
public static void main(String[] args) {
Disk d1 = new Disk(3);
Disk d2 = new Disk(1+2);
System.out.println(d1.equals(d2));
System.out.println(d1.equals("A disk with radius 3"));
}
}
 

Oneixee5

Top Contributor
Also "brauchen" tut man Getter und Setter nicht. das Prinzip der Kapselung in der objektorientierten Programmierung verlangt diese aber. Mit der entsprechenden Sichtbarkeit könntest du von überall direkt auf die Variablen zugreifen. Nur ist das meistens keine gute Idee. Innerhalb einer Klasse ist es ganz üblich nicht unbedingt über die Getter und Setter zu arbeiten. Falls aber von außen jemand auf die Variable zugreift, dann soll evtl. verhindert werden das radius einen negativen Wert bekommt. Mit einem Setter der das überprüft und verhindert ist das ganz leicht durchzusetzen. Mit Gettern ist das ganz ähnlich. Stell dir vor deine Variable ist ein Array. Jetzt kann jeder von außen das Array verändern, also den internen Zustand deiner Instanz. Erzeugst du aber im Getter eine Kopie von dem Array und gibst diese zurück, dann kann man außerhalb der Klasse mit der Kopie tun was man will. Der interne Zustand der Instanz wird nicht verändert.
Es gibt immer wieder Diskussionen um Getter und Setter, in manchen Programmiersprachen werden diese ganz weggelassen oder man generiert sie automatisch usw.. Man hat sich aber, vereinfacht gesagt, auf das Prinzip der Kapselung geeinigt und wendet es deshalb an.
 

Say

Aktives Mitglied
Also "brauchen" tut man Getter und Setter nicht. das Prinzip der Kapselung in der objektorientierten Programmierung verlangt diese aber. Mit der entsprechenden Sichtbarkeit könntest du von überall direkt auf die Variablen zugreifen. Nur ist das meistens keine gute Idee. Innerhalb einer Klasse ist es ganz üblich nicht unbedingt über die Getter und Setter zu arbeiten. Falls aber von außen jemand auf die Variable zugreift, dann soll evtl. verhindert werden das radius einen negativen Wert bekommt. Mit einem Setter der das überprüft und verhindert ist das ganz leicht durchzusetzen. Mit Gettern ist das ganz ähnlich. Stell dir vor deine Variable ist ein Array. Jetzt kann jeder von außen das Array verändern, also den internen Zustand deiner Instanz. Erzeugst du aber im Getter eine Kopie von dem Array und gibst diese zurück, dann kann man außerhalb der Klasse mit der Kopie tun was man will. Der interne Zustand der Instanz wird nicht verändert.
Es gibt immer wieder Diskussionen um Getter und Setter, in manchen Programmiersprachen werden diese ganz weggelassen oder man generiert sie automatisch usw.. Man hat sich aber, vereinfacht gesagt, auf das Prinzip der Kapselung geeinigt und wendet es deshalb an.
Vielen Dank für deine Nachricht. Warum kann in der Methode equals auf die Variable radius zugegriffen werden?
 

httpdigest

Top Contributor
Weil equals() eine _Instanz_methode ist und wenn die Methode ausgeführt wird, wird sie ja im this-Kontext einer Instanz von Disk ausgeführt und sie ist in dieser Klasse deklariert, also kann sie auch auf das private Feld "radius" der this-Instanz (und jeder anderen Disk-Instanz) zugreifen.
 

Say

Aktives Mitglied
Weil equals() eine _Instanz_methode ist und wenn die Methode ausgeführt wird, wird sie ja im this-Kontext einer Instanz von Disk ausgeführt und sie ist in dieser Klasse deklariert, also kann sie auch auf das private Feld "radius" der this-Instanz (und jeder anderen Disk-Instanz) zugreifen.
Hmm, wie weisst du das es sich um eine Instanz-Methode handelt. Sind alle Methoden Instanzen?
 

httpdigest

Top Contributor
Instanzmethode, ist es dann, wenn ein Objekt die Methode aufruft?
Eine Instanzmethode wird auf einem Objekt aufgerufen. Das Objekt ist dann die this Referenz innerhalb der Ausführung der Methode.
Deine equals(Disk) Methode von oben hätte man auch so (äquivalent) schreiben können:
Java:
boolean equals(Disk o) {
  return this.radius == o.radius;
}
 

Say

Aktives Mitglied
Eine Instanzmethode wird auf einem Objekt aufgerufen. Das Objekt ist dann die this Referenz innerhalb der Ausführung der Methode.
Deine equals(Disk) Methode von oben hätte man auch so (äquivalent) schreiben können:
Java:
boolean equals(Disk o) {
  return this.radius == o.radius;
}
Eine Instanzmethode wird auf einem Objekt aufgerufen. Das Objekt ist dann die this Referenz innerhalb der Ausführung der Methode.
Deine equals(Disk) Methode von oben hätte man auch so (äquivalent) schreiben können:
Java:
boolean equals(Disk o) {
  return this.radius == o.radius;
}
Danke für die Erklärung!
 

temi

Top Contributor
Entscheidend ist hier, dass die Methode zur Klasse gehört, richtig eingerückt sieht man das auch:
Java:
class Disk {
    private int radius;
 
    public Disque(int oneRadius) {
        radius = oneRadius;
    }
 
    boolean equals(Disk o) {
        return radius == o.radius;
    }
}
Die Methoden der Klasse müssen ja auf ihre eigenen Daten zugreifen können, sonst wird das irgendwann sinnlos. Der Zugriffsmodifizierer bezieht sich auf den Zugriff von außerhalb der Klasse oder des Packages

Wobei ich grad sehe, dass der Klassenname nicht zum Namen des Konstruktors passt. Lustig. Ist das aus einem französischem Buch ins Deutsche übersetzt?
 
Zuletzt bearbeitet:

temi

Top Contributor
Java:
class Foo {

    static int classVariable = 1; // Klassenvariable
    int instanceVariable = 2; // Instanzvariable
 
    // Klassenmethode
    static int getClassVariable() {
        return classVariable;
    }
 
    // Instanzmethode
    int getInstanceVariable() {
        return instanceVariable;
    }
}

Aufrufe:

Foo.getClassVariable();

Foo foo = new Foo();
foo.getInstanceVariable();

Die Klassenmethode kann NICHT auf die Instanzvariable zugreifen, weil dazu erst eine Instanz existieren muss. Du erhältst dann einen Fehlermeldung "can not access from a static context" oder so ähnlich.

Wichtig. Egal wieviele Instanzen du auch erstellst, der Wert von "classVariable" ist über alle Instanzen identisch, es gibt ihn nur einmal für die Klasse. Jede Instanz hat allerdings einen Wert "instanceVariable" für sich. Würde es im Beispiel einen Setter geben, könnten diese unabhängig voneinander gesetzt werden.

Ein typisches Beispiel ist ein Zähler, wieviele Instanzen einer Klasse erzeugt wurden:
Java:
class CountsItself {
    
    private static int count = 0;
    
    public CountsItself() {
        count++;
    }
    
    public static getCounter() {
        return count;
    }
}
 
Zuletzt bearbeitet:

Say

Aktives Mitglied
Entscheidend ist hier, dass die Methode zur Klasse gehört, richtig eingerückt sieht man das auch:
Java:
class Disk {
    private int radius;
 
    public Disque(int oneRadius) {
        radius = oneRadius;
    }
 
    boolean equals(Disk o) {
        return radius == o.radius;
    }
}
Die Methoden der Klasse müssen ja auf ihre eigenen Daten zugreifen können, sonst wird das irgendwann sinnlos. Der Zugriffsmodifizierer bezieht sich auf den Zugriff von außerhalb der Klasse oder des Packages

Wobei ich grad sehe, dass der Klassenname nicht zum Namen des Konstruktors passt. Lustig. Ist das aus einem französischem Buch ins Deutsche übersetzt?
Danke dir für die Antwort!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T IntelliJ / SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". Java Basics - Anfänger-Themen 4
wolei Java generic interface in a generic class Java Basics - Anfänger-Themen 6
Say abstract class und Objekt erzeugen - Dringend Hilfe Java Basics - Anfänger-Themen 10
C Was tun wenn .class erwartet wird ? Java Basics - Anfänger-Themen 6
M "Class<T> clazz" im Constructor - auch für int möglich? Java Basics - Anfänger-Themen 7
M error: '.class' expected switch(char) Java Basics - Anfänger-Themen 32
123456789sssssaaaa Java Wrapper Class Java Basics - Anfänger-Themen 13
FHEFHJHFJH error: class names, 'summe_bsp', are only accepted if annotation processing is explicitly requested Java Basics - Anfänger-Themen 3
N Variabel in eine class mit "extends JLabel" übertragen Java Basics - Anfänger-Themen 2
J Methode als Class anlegen Java Basics - Anfänger-Themen 7
A Fehler beim Ausführen einer class Datei Java Basics - Anfänger-Themen 6
G Could not initialize class “NoClassDefFoundError" Java Basics - Anfänger-Themen 2
Mr_Kleeblatt Operatoren if (arri[i] != "test.java"&& arri[i] != "test.class") Java Basics - Anfänger-Themen 3
S Generics-Problem: Class, Class<?>, Class<Object> Java Basics - Anfänger-Themen 4
J Klassen .class Datei öffnen Java Basics - Anfänger-Themen 31
C "HelloWorld" - Dateien erstellt, aber ist es eine class-Datei? Java Basics - Anfänger-Themen 2
O Verständniss Problem bei abstract class Java Basics - Anfänger-Themen 7
H .class Datei wird nicht ausgeführt Java Basics - Anfänger-Themen 2
H .jar unterschied .class Java Basics - Anfänger-Themen 3
J class version 52 und 56 Java Basics - Anfänger-Themen 6
L Fehler bei der AUsführung der .class Datei Java Basics - Anfänger-Themen 23
A Class not found - Jar liegt am classpath Java Basics - Anfänger-Themen 2
A Wie erkennt die JVM welche class verwendet werden muss? Java Basics - Anfänger-Themen 3
dapzoo Class File Version zu niedrig? Ausführen über Eingabeaufforderung nicht möglich Java Basics - Anfänger-Themen 14
J Methoden Methoden einer public class AutoCompleteTextField verwenden Java Basics - Anfänger-Themen 14
R HTTP-Links in Java Class finden Java Basics - Anfänger-Themen 3
D jsoup get class name mit leerzeichen Java Basics - Anfänger-Themen 7
D doc.seect jsouo bestimmtes class element finden Java Basics - Anfänger-Themen 1
B Objekte zählen/ Vererbung/ Kopplung/ Interface/ Abstract Class Java Basics - Anfänger-Themen 5
N Fehlende .class Datei Java Basics - Anfänger-Themen 4
S Daten aus eigenständiger .class-Datei abrufen Java Basics - Anfänger-Themen 1
C Was macht `public class ClassName<T extends Comparable<T>>`? Java Basics - Anfänger-Themen 14
W Externe class in Eclipse importieren Java Basics - Anfänger-Themen 0
X Variablen Problem bei Aufteilung in verschiedene Class-Files Java Basics - Anfänger-Themen 4
Javafan01 Dateiname und Public class Java Basics - Anfänger-Themen 4
S Klassen Class mit Funktionen importieren Java Basics - Anfänger-Themen 1
L jar, class, java und wieder zurück Java Basics - Anfänger-Themen 8
T class Datei auslesen Java Java Basics - Anfänger-Themen 5
B Classpath Class lässt sich nicht öffnen Java Basics - Anfänger-Themen 3
J Compiler-Fehler Fehler bei Vektor (E extends Object declared in class Vector) Java Basics - Anfänger-Themen 9
temi Verständnisproblem Class.forName() Java Basics - Anfänger-Themen 3
S setText aus anderer class heraus Java Basics - Anfänger-Themen 6
L Classpath Zwei Bibliotheken enthalten gleiche .class Datei Java Basics - Anfänger-Themen 6
F Taschenrechner "Error loading class..." Java Basics - Anfänger-Themen 5
D Interface Amazon Skill Kit, Interface but method in other class? Java Basics - Anfänger-Themen 3
J Compiler-Fehler class interface or enum expected Java Basics - Anfänger-Themen 1
wilmaed protected class Java Basics - Anfänger-Themen 0
C Erste Schritte Fehler beim *.class Aufruf über cmd.exe Java Basics - Anfänger-Themen 9
N class in class Java Basics - Anfänger-Themen 13
B Linux - Error: Could not find or load main class application.Main Java Basics - Anfänger-Themen 28
V Was bewirkt das Schlüsselwort extends in Verbindung mit class bzw. public class ? Java Basics - Anfänger-Themen 2
Azazel Ist die abstract class das selbe wie ein interface ? Java Basics - Anfänger-Themen 33
lBlKha0s Fehlermeldung : class interface or enum expected Java Basics - Anfänger-Themen 9
P could not find main class obwohl da Java Basics - Anfänger-Themen 17
UnityFriday method getPrevious in class List<ContentType> cannot be applied to given types Java Basics - Anfänger-Themen 29
T error: class, interface, or enum expected Java Basics - Anfänger-Themen 5
D Compiler-Fehler error: .class expected Java Basics - Anfänger-Themen 2
S Dataflow von Start bis die SystemProperties class Java Basics - Anfänger-Themen 1
Detox Class Datei erzeugen nicht möglich über cmd Java Basics - Anfänger-Themen 1
M Scanner class Java Basics - Anfänger-Themen 6
A attach source: Zusammenhang zwischen JAR und .class/.java Dateien? Java Basics - Anfänger-Themen 2
L Compiler-Fehler error: class, interface or enum expected Java Basics - Anfänger-Themen 2
C Klassen Class Files nachladen (mehrer .jar Dateien) Java Basics - Anfänger-Themen 2
P Compiler-Fehler Could not load or find main class fehler Java Basics - Anfänger-Themen 15
J Gestaltung der GUI.class Java Basics - Anfänger-Themen 1
P Compiler-Fehler could not find or load main class Java Basics - Anfänger-Themen 5
Z Gleiches Verzeichnis für class und java unter Windows Muss? Java Basics - Anfänger-Themen 11
S Class Dateien decompilieren Java Basics - Anfänger-Themen 4
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
S Vererbung Fehlermeldung: the hierarchy of the type "class name" is inconsistent Java Basics - Anfänger-Themen 10
J Erste Schritte .class datei in meine form inkludieren Java Basics - Anfänger-Themen 3
O Objekt weitergeben Meth Class NullPointerException Java Basics - Anfänger-Themen 2
M Class Datein aus einen Unterordner verwenden Java Basics - Anfänger-Themen 2
B .class-File mit Reflection auslesen Java Basics - Anfänger-Themen 8
C class in main aufrufen (SWT Oberfläche) Java Basics - Anfänger-Themen 5
P Compiler-Fehler .java Dateien kompilieren und .class Dateien zur .jar Java Basics - Anfänger-Themen 4
D error: Class names, >>>HILFE, anfänger<<< Java Basics - Anfänger-Themen 4
M Class nach Namensänderung nicht mehr vorhanden Java Basics - Anfänger-Themen 6
P .class 2 .exe ? Java Basics - Anfänger-Themen 5
N Compiler-Fehler HundTestlauf class Fehler Java Basics - Anfänger-Themen 4
S Class File Editor gibt beim Start der Programms die Fehlermeldung Source not found aus Java Basics - Anfänger-Themen 1
3 OOP static class in einer Klasse Java Basics - Anfänger-Themen 6
H Umgebungsvariable In DOS-Box läuft die fehlerfreie Class-Datei nicht. Java Basics - Anfänger-Themen 5
J Compiler-Fehler bootstrap class path not set in conjunction with -source 1.6 Java Basics - Anfänger-Themen 2
J Interface compatible to a class Java Basics - Anfänger-Themen 7
Phil42 "Local variable i is accessed from within inner class" Java Basics - Anfänger-Themen 3
F .class expected Java Basics - Anfänger-Themen 3
S Erste Schritte Ausführen einer Class Datei Java Basics - Anfänger-Themen 6
C Klassen Minesweeper Problem. int needs to be final (inner class problem) Java Basics - Anfänger-Themen 3
K Frage zu Class Operator Java Basics - Anfänger-Themen 2
G Threads SuM Class Animation Java Basics - Anfänger-Themen 13
F Befehle von Java class ausführen Java Basics - Anfänger-Themen 3
G default class type Java Basics - Anfänger-Themen 3
Luk10 Generisches Class<...>[] Java Basics - Anfänger-Themen 15
Luk10 instanceof Class<T> Java Basics - Anfänger-Themen 6
N Probleme mit Class in andere Class adden (Cardlayout) Java Basics - Anfänger-Themen 2
R Classpath Setzen von class Verzeichnissen Java Basics - Anfänger-Themen 2
N Klassen Class nur einmal ausführen und sie speichert daten für alle anderen classes? Java Basics - Anfänger-Themen 3
U Class.newInstance() Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben