Klassen/Objekte Verständnis

chrisddj

Neues Mitglied
Hi

Vor kurzem habe ich angefangen mich mit Java zu beschäftigen. Um mir das alles anzueignen benutze ich "Java ist auch eine Insel".
Da mich Klassen/Objekte irgendwie ein bisschen verwirrt haben, habe ich versucht mir das mal an einem Beispiel klarzumachen.
Dazu hab ich ein paar Fragen:
1. Ist meine herangehensweise, den Code auf mehrere *.java Dateien zu verteilen, so in Ordnung? Ich bin mir nicht sicher ob ich verstanden habe wie man seinen Code aufteilen sollte.
2. Wenn ich Methoden oder Variablen aus den Klassen Konto oder Menu in meiner main() benutzen möchte, muss ich dann immer soetwas wie
Java:
Menu startMenu = new Menu();
Konto Peter = new Konto();
in meiner main() schreiben?
3. Bei meiner Menüauswahl, bei der ich zwischen 1,2 oder 3 entscheiden kann, möchte ich auf die Methoden in meiner Klasse Konto zugreifen. Das funktioniert aber nicht ohne
Java:
	Konto Peter = new Konto();
	Peter.ID = 1337;
	Peter.inhaber = "Peter";
	Peter.kapital = 256;
nochmal in der Methode schreibe, obwohl ich das ja eigentlich schon in meiner main() (also Bank.java) getan habe. Lässt sich darauf irgendwie zugreifen?

Verzeiht mir die gemischten Namen mancher Methoden, mir ist in dem Moment nichts besseres eingefallen.

Vielen Dank im Voraus wenn sich jemand die Mühe macht das alles durchzulesen :)

Hier mein Beispielprogramm:

Bank.java
Java:
package klassenuebung;

import static java.lang.System.out;

import java.util.Scanner;

public class Bank {

	public static void main(String[] args) {
		Menu startMenu = new Menu();
		Konto Peter = new Konto();
		
		Peter.ID = 123;
		Peter.inhaber = "Peter";
		Peter.kapital = 256;
		
		
		out.println("Kontonummer: ");
		Scanner kontoNummerInput = new Scanner(System.in);
		double idInput = kontoNummerInput.nextInt();
		if(idInput == Peter.ID){
			out.println("Willkommen " + Peter.inhaber + "!");
			startMenu.showMenu();
		} else {
			out.println("Falsche Kontonummer!");
		}
		
		
	}
}

Konto.java
Java:
package klassenuebung;
import static java.lang.System.out;
import java.util.Scanner;

public class Konto {
	double ID;
	double kapital;
	String inhaber;
	
	
	public void zeigeInhaber(){
		out.println("Inhaber des Kontos: " + inhaber);
	}
	
	public void showKapital(){
		out.println("Ihr Kontostand beträgt: " + kapital + " €");
	}
	
	public void einzahlung(){
		out.println("Wieviel € möchten Sie einzahlen? ");
		Scanner userInput = new Scanner(System.in);
		double betrag = userInput.nextDouble();
		kapital += betrag;
		out.println("Ihr Kontostand beträgt nun " + kapital + " €");
	}
	
	public void auszahlung(){
		out.println("Wieviel € möchten Sie auszahlen? ");
		Scanner userInput = new Scanner(System.in);
		double betrag = userInput.nextDouble();
		kapital -= betrag;
		out.println("Ihr Kontostand beträgt nun " + kapital + " €");
	}
	
}

Menu.java
Java:
package klassenuebung;

import static java.lang.System.out;

import java.util.Scanner;

public class Menu {
	
	public void showMenu(){
		out.println("Was möchten Sie tun?");
		out.println("1: Kontostand prüfen, 2: Einzahlung, 3: Auszahlung");
		Scanner userInput = new Scanner(System.in);
		String menuAuswahl = userInput.next();
				
		Konto Peter = new Konto();
		Peter.ID = 123;
		Peter.inhaber = "Peter";
		Peter.kapital = 256;

		switch(menuAuswahl){
			case "1":
				out.println("--Kontostand--");
				Peter.showKapital();
				break;
			case "2":
				out.println("--Einzahlung--");
				Peter.einzahlung();
				break;
			case "3":
				out.println("--Auszahlung--");
				Peter.auszahlung();
				break;
			default:
				out.println("Wählen Sie zwischen 1,2 oder 3!");
				break;
		}
		
	}
}
 

DieKeksmaffia

Mitglied
Hi chrisddj,
deine Nutzung von Objekten ist richtig (auf dem ersten Blick),
jedoch werden eigentlich Objektvariablen als private deklariert, da sonst auch andere Klassen von außen auf jene Zugreifen können --> das ganze wird unsicher und ist nicht erwünscht,
Also ändere besser die Variablen der Klasse Konto in private:
private double ID;
private double kapital;
private String inhaber;

und gib ihnen jeweils eine get- und set-Methode:

[Java]//set-Methode für einen int:
public void setNameDerVariable(int x){
NameDerVariable=x;
}
//get-Methode für einen int:
public int getNameDerVariable(){
return NameDerVariable
}[/Java]

3. Bei meiner Menüauswahl, bei der ich zwischen 1,2 oder 3 entscheiden kann, möchte ich auf die Methoden in meiner Klasse Konto zugreifen. Das funktioniert aber nicht ohne
Java Code:

Konto Peter = new Konto();
Peter.ID = 1337;
Peter.inhaber = "Peter";
Peter.kapital = 256;


nochmal in der Methode schreibe, obwohl ich das ja eigentlich schon in meiner main() (also Bank.java) getan habe. Lässt sich darauf irgendwie zugreifen?
In deinem Programm greift die Klasse Bank ja nicht direkt auf das Konto von Peter zu sondern erstellt nur ein Menu, welches wiederum ein Konto erstellt / erstellen muss da Objekte (ganz grob) an die Klasse in der Sie erstellt wurden gebunden sind.

(Dies stimmt aber nicht ganz denn man kann Objekte auch als public deklarieren und sie damit für jeder Klasse "sichtbar" machen oder mit dem Konstruktor an andere Objekt übergeben)

Also ist das Objekt Konto in der main überflüssig oder du übergibst es an die Klasse Menu oder lässt alle Methoden der Klasse Menu (showMenu()) als Parameter ein Objekt von der Klasse Konto erwarten mit welchem dann die Methode weiterarbeiten. (Die 3. Variante ist die beste, weil dann nicht für jedes neue Konto ein neues Menu gebraucht wird.):
[Java]public void showMenu(Konto myKonto){
//Code..
//in der switch dann:
switch(menuAuswahl){
case "1":
out.println("--Kontostand--");
myKonto.showKapital();
break;
case "2":
out.println("--Einzahlung--");
myKonto.einzahlung();
break;
case "3":
out.println("--Auszahlung--");
myKonto.auszahlung();
break;
default:
out.println("Wählen Sie zwischen 1,2 oder 3!");
break;
}[/Java]
 

chrisddj

Neues Mitglied
Hi,

danke für deine Antwort. Dass das nicht sicher war dachte ich mir schon. Hab alles so umgesetzt wie du es vorgeschlagen hast und es funktioniert. :)
Werde mir morgen noch ein zweites Beispiel ausdenken und daran ausprobieren.

Vielen Dank soweit für die Hilfe.
 

DontKnowJava

Mitglied
Hi chrisddj,
deine Nutzung von Objekten ist richtig (auf dem ersten Blick),
jedoch werden eigentlich Objektvariablen als private deklariert, da sonst auch andere Klassen von außen auf jene Zugreifen können --> das ganze wird unsicher und ist nicht erwünscht,
Also ändere besser die Variablen der Klasse Konto in private:
private double ID;
private double kapital;
private String inhaber;

und gib ihnen jeweils eine get- und set-Methode:

[Java]//set-Methode für einen int:
public void setNameDerVariable(int x){
NameDerVariable=x;
}
//get-Methode für einen int:
public int getNameDerVariable(){
return NameDerVariable
}[/Java]

Wobei als fragende Anmerkung: Die Setter und Getter in dieser Form sind genauso unsicher wie der direkte Zugriff auf die Objektvariablen, da ja keine Einschränkung erfolgt. Denn so kann ich die Objektvariablen genauso "platt" machen - nur eben über den Setter. So ist also - abgesehen vom Stil - gar nichts gewonnen?
 

fLooojava

Bekanntes Mitglied
Wobei als fragende Anmerkung: Die Setter und Getter in dieser Form sind genauso unsicher wie der direkte Zugriff auf die Objektvariablen, da ja keine Einschränkung erfolgt. Denn so kann ich die Objektvariablen genauso "platt" machen - nur eben über den Setter. So ist also - abgesehen vom Stil - gar nichts gewonnen?

Prinzipiell ist es schöner Programmierstil, diese Variablen mit private zu deklarieren. Weiters kannst du ja selber entscheiden ob du willst, dass diese Variablen von außerhalb modifiziert werden dürfen. Dementsprechend implementierst du Setter/Getter-Methoden. Sobald du deine Methoden implementiert hast, willst du doch eigentlich explizit, dass Sie geändert werden dürfen.

Implementierst du die Getter/Setter nicht, dann willst du auch nicht dass sie modifiziert werden können.

Ich denke hier ist es auch noch wunderschön beschrieben: Quelle: Zugriffsfunktion – Wikipedia
Änderungsmethoden (Setter)

Eine Zugriffsmethode, die ein Objektattribut ändert, heißt auch Änderungsmethode oder Setter (von englisch to set – etwas einstellen, setzen). Ein Vorteil der Änderungsmethode besteht darin, dass sie vor der Änderung den Wert auf Gültigkeit prüfen kann. So könnte beispielsweise in einem Objekt, das eine Person darstellt, die Funktion zum Setzen des Namens sicherstellen, dass als Name kein leerer Text übergeben wird. Falls ein ungültiger Wert übergeben wird, besteht eine mögliche Reaktion im Auslösen einer Ausnahmeroutine, wodurch der normale Programmablauf unterbrochen und ein Fehler signalisiert wird.

Ein weiterer Vorteil der Änderungsmethode besteht darin, dass sie eventuelle Beobachter (im Sinne des gleichnamigen Entwurfsmusters) über die Änderung des Objektzustands informieren kann. Dies wird beispielsweise in Model View Controller-Architekturen benutzt, um eine Sicht (View, z. B. ein Bildschirmformular) zu aktualisieren, wenn der Inhalt des zugrundeliegenden Modells (Model, z. B. ein Datensatz in einer Datenbanktabelle) geändert wurde.

In einigen Programmiersprachen ist es üblich, die Namen aller Änderungsmethoden mit set beginnen zu lassen. So könnte z. B. eine Methode, die den Namen einer Person ändert, setName heißen. In anderen Programmiersprachen ist dieser Präfix unüblich und die Methode hieße einfach name, da bereits der parametrisierte Funktions/Prozeduraufruf als solcher eine setzende Methode impliziert.
 
Zuletzt bearbeitet:

DontKnowJava

Mitglied
Hallo,

das ist tatsächlich ein Problem.

Vom Stil her mag es besser sein mit Settern & Gettern zu arbeiten.

Es mag aber auch oft an den einfachen Beispielen liegen wo es keine weiteren logischen Einschränkungen der Werte gibt. In der Realität hat man oft entweder sowieso keinen Zugriff auf Attribute (also auch keine Getter & Setter) und wenn, dann gibt es ja oft Prüfungen innerhalb der Setter, die dann das ganze sowieso sinnhafter machen?

Mehr Sinn machen würde es wenn man (AFAIK in C# geht das?) eine Variable getrennt auf lesbar/ schreibbar setzen könnte.

Viele Grüßle :)
 
Zuletzt bearbeitet:

consider

Mitglied
Allerdings kann so jederzeit später eine Prüfung implementiert oder intern Variablentypen geändert werden, ohne dass ein Benutzer der Klasse etwas ändern müsste, da er ja nur die Setter benutzt und nicht direkt auf Variablen zugreift.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Klassen und Objekte => richtiges Verständnis? Java Basics - Anfänger-Themen 6
D Initialisierung von Klassen-Objekte Java Basics - Anfänger-Themen 47
Encera Auf Objekte aus anderer Klassen zugreifen Java Basics - Anfänger-Themen 20
S Objekte von zwei klassen in zwei verschiedene Textdateien schreiben Java Basics - Anfänger-Themen 5
C Fernseher-Aufgabe (Methoden, Klassen und Objekte) Java Basics - Anfänger-Themen 63
Y Klassen Klassen und Objekte Java Basics - Anfänger-Themen 3
Y Klassen Klassen und Objekte mit set und get Java Basics - Anfänger-Themen 0
G Klassen und Objekte Java Basics - Anfänger-Themen 2
M Klassen und Objekte Java Basics - Anfänger-Themen 2
J Objekte und Abstrakte Klassen Java Basics - Anfänger-Themen 2
Orkanson Objekte und Klassen Java Basics - Anfänger-Themen 8
S Objekte mit gleichem Namen in unterschiedlichen Klassen Java Basics - Anfänger-Themen 3
Z OOP Objekte einer Klasse weiteren Klassen zur Verfügung stellen Java Basics - Anfänger-Themen 17
D Methoden Wie können Klassen auf Klassenfremde Objekte zugreifen? Java Basics - Anfänger-Themen 7
Z Wie Objekte anderer Klassen ansprechen? Java Basics - Anfänger-Themen 2
K JUnit: Objekte von eigenen Klassen vergleichen...geht nicht Java Basics - Anfänger-Themen 5
T Klassen Referenzen auf Klassen / Objekte Java Basics - Anfänger-Themen 5
K Methoden Uhr als Übungsaufgabe Klassen/Objekte Java Basics - Anfänger-Themen 3
A OOP Klassen und Objekte - Diagramme Java Basics - Anfänger-Themen 2
K Best Practice In Klassen auf andere Objekte mit variablen Namen zugreifen Java Basics - Anfänger-Themen 6
A Objekte aus 2 Klassen mit compareTo() vergleichen Java Basics - Anfänger-Themen 7
V Objekte/Klassen erstellen - Erklärung anhand Beispiel Java Basics - Anfänger-Themen 4
D Klassen Klassen, Objekte, Konstruktor - einfach erklärt Java Basics - Anfänger-Themen 12
U Objekte in Array erstellen und Methode in verschiedenen klassen aufrufen Java Basics - Anfänger-Themen 5
S Vererbung Objekte in verwandten Klassen (Kovarianz, Polymorphie) Java Basics - Anfänger-Themen 4
B Objekte aus einer anderen Klasse(in der sich weitere Klassen befinden) erzeugen Java Basics - Anfänger-Themen 24
B Klassen und Objekte Java Basics - Anfänger-Themen 10
J Objekte und Klassen Java Basics - Anfänger-Themen 8
I Objekte an andere Klassen/Methoden übergeben? Java Basics - Anfänger-Themen 5
L Vererbung - Wie Objekte verschiedener Klassen unterscheiden Java Basics - Anfänger-Themen 3
T Klassen, Objekte, Methoden Java Basics - Anfänger-Themen 9
X Klassen & Objekte Java Basics - Anfänger-Themen 6
J Verständniss Frage zu Klassen, Objekte und Methoden Java Basics - Anfänger-Themen 8
J Objekte und Klassen? Java Basics - Anfänger-Themen 12
G Objekte von Klassen die erst zur Laufzeit bekannt sind erstellen Java Basics - Anfänger-Themen 6
B Uni (Klassen und Objekte) verwenden Java Basics - Anfänger-Themen 2
D Objekte und Klassen Java Basics - Anfänger-Themen 15
muchodrinko Auf Objekte anderer Klassen zugreifen? Java Basics - Anfänger-Themen 16
T Klassen und Objekte externer Aufruf. Java Basics - Anfänger-Themen 8
A Objekte von abstrakten Klassen? Java Basics - Anfänger-Themen 6
K Objekte/Klassen erweitern ~ Javascript Prototyp Java Basics - Anfänger-Themen 5
M Objekte zwischen Klassen "handeln" Java Basics - Anfänger-Themen 4
K Objekte erstellen, wenn der Klassen-Name als String vorliegt Java Basics - Anfänger-Themen 4
M Klassen und Objekte (kopieren) Java Basics - Anfänger-Themen 7
L Zusammenhang Methoden, Klassen, Objekte, static - sun doku Java Basics - Anfänger-Themen 4
K Programm in Klassen/Objekte zerlegen - wie? Java Basics - Anfänger-Themen 3
G Was sind Klassen, Objekte und Methoden? Java Basics - Anfänger-Themen 3
N Zugriff auf Objekte von fremden Klassen aus? Java Basics - Anfänger-Themen 4
M Klassen, Objekte, Konstruktor Java Basics - Anfänger-Themen 5
J Methodenaufrufe abstrakte Klassen, Interfaces Java Basics - Anfänger-Themen 17
M Abstrakte Klassen - Notation Java Basics - Anfänger-Themen 9
Detlef Bosau Nachladen von Klassen zur Laufzeit Java Basics - Anfänger-Themen 24
M Anonyme Klassen - Warum wird in der Konsole nichts ausgegeben? Java Basics - Anfänger-Themen 1
MoxMorris Einige Methoden aus verschiedenen Klassen nacheinander auszuführen läuft seltsam Java Basics - Anfänger-Themen 2
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
I 2 verschiedene Klassen mit gleichen Property vergleichen Java Basics - Anfänger-Themen 13
C Array von Klassen Java Basics - Anfänger-Themen 2
monsterherz 2 Klassen daher Probs mit dem Dateinamen Java Basics - Anfänger-Themen 9
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 9
I JPA Query für mehrere Klassen Java Basics - Anfänger-Themen 3
I @Entity Klassen, Service Beans etc. aus einem Share Projekt beziehen? Java Basics - Anfänger-Themen 26
S IntelliJ geht alle Klassen durch Java Basics - Anfänger-Themen 9
I Gleiche Klassen und Methoden in unterschiedlichen Projekten nutzen Java Basics - Anfänger-Themen 2
T variablen klassen übergreifend Java Basics - Anfänger-Themen 12
N Klassen Methoden anderer Klassen aufrufen Java Basics - Anfänger-Themen 4
D Klassen Klassen Kommunikation Java Basics - Anfänger-Themen 12
berserkerdq2 Zwei Klassen Erben von der Klasse A, die eine Klasse kann ich an Methoden übergeben, die als Parameter A haben, die andere nicht? Java Basics - Anfänger-Themen 3
M Andere Methoden in anderen Klassen aufrufen Java Basics - Anfänger-Themen 11
L Methoden in anderen Klassen nutzen Java Basics - Anfänger-Themen 6
D Klassen und Vererbung Java Basics - Anfänger-Themen 2
L Best Practice Annotierte Klassen im Classpath herausfinden Java Basics - Anfänger-Themen 1
P Mit dem Scanner Klassen aufrufen Java Basics - Anfänger-Themen 3
O Klassen Zusammenspiel zwischen 2 Klassen Java Basics - Anfänger-Themen 1
K Zweite Ausgabe von vererbten Klassen Java Basics - Anfänger-Themen 3
M Wie können Klassen nicht-materialisierte Attribute haben, die nur über get/ set-Mehoden simuliert sind? Java Basics - Anfänger-Themen 6
Speedrunner klassen aufrufen Java Basics - Anfänger-Themen 41
M Log4J (v2) nachträglich in allen Klassen hinzufügen Java Basics - Anfänger-Themen 9
D importieren eigener Klassen Java Basics - Anfänger-Themen 12
W Wo ist der Wurm in meinem Grundverständnis von Klassen? Java Basics - Anfänger-Themen 22
S Daten/Klassen/Packages richtig updaten!? Java Basics - Anfänger-Themen 2
alice98 Erste Schritte Liste erstellen ohne vorgefertigte Klassen Java Basics - Anfänger-Themen 1
C Archiv für eigene Klassen Java Basics - Anfänger-Themen 9
elsaaaaaa Wochentag als String ausgeben mit JDK Klassen Java Basics - Anfänger-Themen 6
CptK Generics: Klassen die Interface implementieren, aber selbst nicht das Interface sind Java Basics - Anfänger-Themen 8
Z Mehtode bei Start des Programms ausführen (Klassen übergreifend) Java Basics - Anfänger-Themen 12
J Allgemeines Problem mit Klassen Java Basics - Anfänger-Themen 5
TimoN11 Java Klassen Global einbinden Java Basics - Anfänger-Themen 1
B Inventar als einzelne Klassen anlegen? Java Basics - Anfänger-Themen 12
G Java Klassen und Instanzmethoden Java Basics - Anfänger-Themen 15
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 3
T Vererbung Verschiedene Attribute für vererbte Klassen Java Basics - Anfänger-Themen 4
S Klassen instanziieren und verwenden von Getter und Setter Java Basics - Anfänger-Themen 4
B Variablen Variablen übertragen ohne Klassen Java Basics - Anfänger-Themen 5
H Methoden in großen Klassen gruppieren oder auslagern? Java Basics - Anfänger-Themen 10
G Abstrakte Klassen Java Basics - Anfänger-Themen 11
A Generischen Klassen Java Basics - Anfänger-Themen 8
A Vererbung Klassen im Bezug auf Auto´s Java Basics - Anfänger-Themen 18
A Generische Klassen/Interface Java Basics - Anfänger-Themen 1
A Klassen Vererbung und zusätzliche Unterklassen Java Basics - Anfänger-Themen 23
J 2 klassen benutzen Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben