Skip to content
xenforo

Prinzip der Kapselung - Wie Ausgabe?

Content

Prinzip der Kapselung - Wie Ausgabe?

Hi Leute!

Die Attribute einer Klasse sollten ja normalerweise als "private" deklariert werden, um so den Zugriff auf die Attribute im Hauptprogramm zu verhindern / bzw. zu kontrollieren!

Nur, wie kann ich die Daten dann ausgeben, wenn sie als private deklariert wurden?

Habe hier ein einfaches Beispiel: Es gibt eine Oberklasse "Schule" und mehrere Subklassen "Wirtschaftsgymnasium", "Berufskolleg", etc. etc.


Kann mir einer sagen, wie ich das anhand meines Codes machen könnte? Bitte keine Veränderungen mit einbringen, alles was wir wissen müssen, ist an Befehlen vorhanden [IMG]https://www.java-forum.org/de/images/smiles/icon_wink.gif[/IMG]


Also hier der Code (abgekürzt, nur bis Berufskolleg):

 \[IMG\]https://www.java-forum.org/de/bilder/codeopen.gif\[/IMG\]\[IMG\]https://www.java-forum.org/de/bilder/codeclose.gif\[/IMG\] **Code:**                   

public static void main(String[] args)
{
berufskolleg bk;
wg wg;
berufsschule bs;
ws ws;

bk = new berufskolleg();
wg = new wg();
bs = new berufsschule();
ws = new ws();

bk.schuelerzahl = 90;
bk.lehreranzahl = 35;
bk.abschluss = "Gebundene Fachhochschulreife";
bk.bildungsmoeglichkeiten = "Studium an einer Fachhochschule";

wg.schuelerzahl = 200;
wg.lehreranzahl = 90;
wg.abschluss = "Allgemeine Hochschulreife";
wg.bildungsmoeglichkeiten = "Studium an einer Fachhochschule oder an einer Universitaet";

bs.schuelerzahl = 78;
bs.lehreranzahl = 55;
bs.abschluss = "Ausbildung beendet";
bs.gehalt = 476;

ws.schuelerzahl = 76;
ws.lehreranzahl = 20;
ws.abschluss = "Mittlere Reife";
ws.bildungsmoeglichkeiten = "Berufskolleg oder Wirtschaftsgymnasium";

Out.println("SCHULEN");
Out.println("");
Out.println("=========================================================");
Out.println("");
Out.println("Berufskolleg (1), Wirtschaftsgymnasium (2),");
Out.println("Berufsschule (3), Wirtschaftsschule (4)");
int wahl = In.readInt();
switch (wahl)
{
case 1: bk.info(); break;
case 2: wg.info(); break;
case 3: bs.info(); break;
case 4: ws.info(); break;
}
}
}


public class schule {[/b]
public String s;
public int schuelerzahl;
public int lehreranzahl;
public void ausgabe(String s)
{
Out.println(s + " hat " + schuelerzahl + " Schueler und " + lehreranzahl + " Lehrer.");
}
}


public class berufskolleg extends schule
{
public String abschluss; [COLOR=#689868]//Das hier soll [B]private[/B] werden[/COLOR]
public String bildungsmoeglichkeiten; [COLOR=#689868]// Das hier soll [B]private[/B] werden[/COLOR]
public void info(){
super.ausgabe("Das Berufskolleg");
Out.println("Abschluss: " + abschluss);
Out.println("Studiumsmoeglichkeiten: " + bildungsmoeglichkeiten);
}
}

        \

Für Antworten bin ich sehr, sehr dankbar!

Comments

Max,

das einfachste ist, du erlaubst den Programm das lesen/schreiben der Variablen über Funktionen. Das heißt der Zugriff auf die Variablen ist nicht direkt möglich. Dadurch kannst du die Zugriffe steuern, indem du ungültige Werte zurückweisen kannst.

Hoffe ds hilft dir ein Stück weiter.

lg Steve

Max_Neuling wrote:

Die Attribute einer Klasse sollten ja normalerweise als "private" deklariert werden, um so den Zugriff auf die Attribute im Hauptprogramm zu verhindern / bzw. zu kontrollieren!

Nur, wie kann ich die Daten dann ausgeben, wenn sie als private deklariert wurden?

Indem du getter und setter-Methoden für deine privaten Attribute deklarierst :). Hier kannst du dann bevor du die Werte setzt z.B. Prüfungen durchführen, ob der "neue" Wert deinen Vorgaben entspricht und überhaupt ein gültiger Wert ist. Zudem kannst du die Methoden so deklarieren, dass z.B. nur Klassen aus dem gleichen Package die Methoden aufrufen dürfen.

Du rufst dann nicht auf bk.abschluss sondern bk.getAbschluss()

viele Grüße
Jasmin

ich versteh' jetzt das Problem nicht. Die Superklasse und die Subklasse haben doch eine Ausgabemethode...

[QUOTE="Max_Neuling, post: 447496"]
[B]public[/B] [B]class[/B] schule {[/b]
[B]public[/B] String s;
[B]public[/B] [B]int[/B] schuelerzahl;
[B]public[/B] [B]int[/B] lehreranzahl;
[B][COLOR="Red"]public[/B] [B]void[/B] ausgabe(String s)[/COLOR]
{
Out.println(s + " hat " + schuelerzahl + " Schueler und " + lehreranzahl + " Lehrer.");
}
}
[/QUOTE]

Hier ist die Ausgabemethode der Superklasse.

[QUOTE="Max_Neuling, post: 447496"]
[B]public[/B] [B]class[/B] berufskolleg [B]extends[/B] schule
{
[B]public[/B] String abschluss; [COLOR=#689868]//Das hier soll [B]private[/B] werden[/COLOR]
[B]public[/B] String bildungsmoeglichkeiten; [COLOR=#689868]// Das hier soll [B]private[/B] werden[/COLOR]
[B][COLOR="Red"]public[/B] [B]void[/B] info()[/COLOR]{
[B]super[/B].ausgabe("Das Berufskolleg");
Out.println("Abschluss: " + abschluss);
Out.println("Studiumsmoeglichkeiten: " + bildungsmoeglichkeiten);
}
}
[/QUOTE]

Hier ist die Ausgabemethode der Subklasse. Die kann auf ihre eigenen 'private'-Variablen zugreifen.