# Datenkapselung_2



## thor_norsk (30. Dez 2021)

Hallo, ich bin wieder da 

Aufgabe: Bitte sehen Sie sich folgende Klassenvereinbarung genau an.

[CODE lang="java" title="Datenkapselung_2"]public class Ziege {

    private int gewicht;
    private char geschlecht;
    }

// ein Konstruktor
private Ziege (int gewicht, char geschlecht) {

    this.gewicht = gewicht;
    this.geschlecht = geschlecht;
    }.....



[/CODE]

Können Sie in einem Quelltext in einem anderen Paket eine Instanz der Klasse Ziege erstellen? Begründen Sie bitte Ihre Antwort und nennen Sie 
gegebenenfalls die Stellen im Quelltext der Klasse Ziege, die geändert werden müssen.

Mein Lösungsansatz: 

Nein, weil im Sinne der Datenkapselung, sind sowohl die Instanzvariablen und der Konstruktor auf private gesetzt sind, und somit von Außenwelt isoliert.

Eine Möglichkeit wäre den Konstruktor auf ,,public’’ zu setzen.

Falls noch weiter im Quelltext Methoden auf private gesetzt sind sollte man die innerhalb der Konstruktor aufrufen.

Also: Erste sinnvolle Veränderung wäre aus meiner Sicht:

[CODE lang="java" title="Datenkapselung_2"]public class Ziege {

    private int gewicht;
    private char geschlecht;
    }

// ein Konstruktor
public Ziege (int gewicht, char geschlecht) {

    this.gewicht = gewicht;
    this.geschlecht = geschlecht;
    }.....[/CODE]


----------



## Mart (30. Dez 2021)

Das mit dem Konstruktor auf public setzen ist richtig ( ist auch wahrscheinlich ziel davon  von der Aufgabe )


die Ziege kann auch nicht im aktuellen paket erzeugt werden da der einzige konstruktor private ist .. so nebenbei

eine andere möglichkeit wäre es den konstruktor private zu lassen ( so kann man auch singletons erstellen ist ganz fancy zu wissen , oder man kann mal "factory" pattern angucken aber ob das mit private konstruktor ist weis ich nicht )

und eine methode shcreibt


```
public static Ziege ziegenKonstruktorMethode(int gewicht, char geschlecht){
    return new Ziege(int gewicht, char geschlecht);
}
```


PS ( aber wahrshceinlich nur tipp fehler

```
public class Ziege {

    private int gewicht;
    private char geschlecht;
    } // hier wird die Klasse Geschlossen !



// ein Konstruktor => zu welcher klasse gehört denn der ? die Ziegen klasse ist schon geschlossen
private Ziege (int gewicht, char geschlecht) {
  
    this.gewicht = gewicht;
    this.geschlecht = geschlecht;
    }.....
```


----------



## mihe7 (30. Dez 2021)

Kleine Ergänzung zum Kommentar von @Mart 



thor_norsk hat gesagt.:


> Nein, weil im Sinne der Datenkapselung, sind sowohl die Instanzvariablen und der Konstruktor auf private gesetzt sind, und somit von Außenwelt isoliert.


Der access modifier der Variablen spielt für die Instantiierung keine Rolle, von der Klasse und den Konstruktoren dagegen schon.


----------

