# Passende Modifier



## Bohne (6. Apr 2006)

Welcher der Modifier public, protected, (nichts) und private ist denn in einem speziellen Fall der richtige? Immer der, der die gewünschte Funktionalität (z. B. der Klassen) nicht beeinträchtigt und gleichzeitig die kleinstmögliche Sichtbarkeit hat? 

Ist das generell so, oder gibts da Ausnahmen (angenommen man könnte alles machen, was man will / das Programm soll)?

Danke!


----------



## AlArenal (6. Apr 2006)

Kann mir mal einer die Frage erklären???

Man nimmt den Modifier, der für den jeweiligen Einsatzzweck am sinnvollsten ist


----------



## Bohne (6. Apr 2006)

AlArenal hat gesagt.:
			
		

> Kann mir mal einer die Frage erklären???


Hm, nun ja  :roll:

Definiere sinnvoll. Ich mach mal ein Beispiel:


```
public class A {
  public int giveMeSomeThing() {
    return 1234;
  }
}

public class B {
  private void getSomeThingFromA() {
    A a = new A();
    System.out.println(a.giveMeSomeThing());
  }
}
```

Beide Klassen sind im selben Paket. Im Prinzip könnte ich den Modifier von giveMeSomeThing() weglassen oder auf protected setzen (nur private würde so nicht gehen). Sollte ich das auch tun, oder ist das egal?  ???:L


----------



## AlArenal (6. Apr 2006)

Du kannst es machen, aber ob es sinnvoll ist, kann dir für solch sinnfreies Beispiel keiner sagen. Es hängt doch davon ab wozu deine Variablen und Methoden gut sein sollen, wer/was sie von wo aufrufen und überschreiben können soll und und und...


----------



## Beni (6. Apr 2006)

- Soweit offen, dass man es benützen und das Verhalten ändern kann.
- Soweit geschlossen, dass man es nicht in einen korrupten Zustand bringt, und so dass die interne Implementierung verändert werden kann.

Leider widersprechen sich die zwei Ziele... du musst für dein Problem einen Mittelweg finden, der zu deinem Programm passt. Eine entgültig Lösung wird es da nie geben, wohl aber kannst du zwischen guten und schlechten Varianten unterscheiden :wink:


----------



## Ralf Ueberfuhr (7. Apr 2006)

Beni hat es schon gut erklärt. Ich erklär es mal so:

- private, wenn nur die Instanzen dieser Klasse drauf zugreifen soll (Hilfsfunktionen)
- protected, wenn nur die Instanzen dieser und abgeleiteter Klassen drauf zugreifen sollen (Hilfsfunktionen oder Konstruktoren, die beim Vererben evtl. gebraucht werden könnten, meist Getter)
- public, wenn es eben öffentlich sein soll
- ohne Modifier, wenn nur Instanzen von Klassen aus dem gleichen Package zugreifen dürfen (z.B. Konstruktoren oder Klassen beim Factory-Pattern)


----------



## Bohne (12. Apr 2006)

Jetzt hätte ich noch eine Frage zu final:

In meinem Projekt habe ich einige Klassen und Methoden, die ich theoretisch als final deklarieren könnte, da die Klassen nicht abgeleitet werden.

Würde sich 1) der Aufwand (alles mit final deklarieren) für den Performancegewinn lohnen, oder soll ich 2) final nur da einsetzen, wo er wirklich einiges bringt, oder 3) es ganz lassen, weil's prinzipiell womöglich egal wäre?


----------

