Frage zur OOP in Java

  • Also, ich hab folgende Frage zur OOP:

    wenn ich in einer Klasse eine Variable(private), die einen nicht-primitiven Datentyp hat anlege und sie per getter lese, kann ich eigentlich dann auch in den übergebenen nicht-primitiven Datentyp schreiben, und hätte somit das private umgangen oder lieg ich da falsch? in Code tät ich es mir so vorstellen: (das ja in dem Fall auch funktioniert)

    Und das heisst, wenn ich einen nicht-primitiven Datentyp wirklich private machen möchte muss ich ihn im getter jedes mal clonen...?

    Und noch eine Frage zu den Signaturen, in Java ist statt const final zu verwenden, auch wenn es nicht ganz das selbe ist, und readonly gibt es gar nicht.

    Thomas

  • wenn ich in einer Klasse eine Variable(private), die einen nicht-primitiven Datentyp hat anlege und sie per getter lese, kann ich eigentlich dann auch in den übergebenen nicht-primitiven Datentyp schreiben, und hätte somit das private umgangen oder lieg ich da falsch?

    Ja, weil das, was dein Getter zurückgibt, das Objekt selbst ist und keine Kopie.

    Und das heisst, wenn ich einen nicht-primitiven Datentyp wirklich private machen möchte muss ich ihn im getter jedes mal clonen...?

    Oder gar nicht per Getter zugänglich machen.

  • das objekt soll ja private sein, damit nicht jeder einfach so darauf zugreifen kann.
    mit gettern kann man kontrollieren, was zurückgegeben wird.
    eine korrekte datenkapselung wäre in diesem fall, wenn Obj.x auch private wäre und der Zugriff darauf auch nur per getter zugelassen wird.
    dann kanns du dir nämlich sicher sein, dass niemand änderungen an deinem zurückgelieferten objekt vornehmen kann die du nicht haben möchtest.
    Ein geklontes Objekt zurückzugeben ist auch eine möglichkeit, aber normalerweise erwartet man sich wenn man ein Objekt zurückbekommt, dass man diese auch ändern DARF und dass diese Änderungen sich auf das ursprüngliche Object auswirken.
    Beispiel: wenn ich irgendwas mache wie

    Code
    irgendwas.getSomething().setParameter("blaBla")


    dann möchte ich das meine änderungen auch am ursprünglichen objekt durchgeführt werden.

    "All through my life I've had this strange unaccountable feeling that something was going on in the world, something big, even sinister, and no one would tell me what it was."
    "No," said the old man, "that's just perfectly normal paranoia. Everyone in the Universe has that."

    😁😂😃😄😅😆😇😈😉😊😋😌😍😎😏😐😒😓😔😖😘😚😜😞😠😡😢😣😥😨😩😪😫😭😰😱😲😳😵😶😷

  • klingt irgendwie logisch...

    eigentlich heisst das, das wenn ich einen solchen getter hätte:
    Object getter()
    {
    return this.var;
    }

    das ich dann this.var auch gleich public machen kann, spar ich mir den getter und komm schlussendlich e auf einen ähnlichen protection-level (bis auf die sichtbarkeit)

    Wenn der getter anders aussieht ist es e etwas anderes, aber bei dem einen konkreten fall wäre der getter nur ballast und macht eigentlich keinen sinn....

    Thomas


  • das ich dann this.var auch gleich public machen kann, spar ich mir den getter und komm schlussendlich e auf einen ähnlichen protection-level (bis auf die sichtbarkeit)


    nicht ganz, denn dann kann ich z.b.

    Code
    o.var = null


    mache, und das kann böse sein...

    "All through my life I've had this strange unaccountable feeling that something was going on in the world, something big, even sinister, and no one would tell me what it was."
    "No," said the old man, "that's just perfectly normal paranoia. Everyone in the Universe has that."

    😁😂😃😄😅😆😇😈😉😊😋😌😍😎😏😐😒😓😔😖😘😚😜😞😠😡😢😣😥😨😩😪😫😭😰😱😲😳😵😶😷

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!