Java Inner Class Access und Best Practices

8

Es ist spät und es ist zu lang, so dass ich Probleme habe, mich daran zu erinnern, wie das funktioniert.

Ich weiß, dass eine Innere Klasse Zugriff auf alles in der Äußeren Klasse hat (weil sie ein Mitglied dieser Klasse ist), aber was ist umgekehrt?

1) Hat die äußere Klasse Zugriff auf private Variablen und Methoden innerhalb einer inneren Klasse?

2) Ich habe Artikel gesehen, die erwähnen, dass innere Klassen privat sein sollten, so dass sie nur für die äußere Klasse zugänglich sind. Was bewirkt das für die Zugänglichkeit dieser inneren Klasse?

3) Was sind die besten Praktiken im Umgang mit Zugriffsebenen, wenn es um Ihre inneren Klassen geht? Ich gehe davon aus, mehr Verkapselung desto besser, aber geht das auf Kosten der Barrierefreiheit?

Danke!

    
DanK 07.11.2013, 00:52
quelle

1 Antwort

13

Dieses Thema wird von Effective Java (2nd edition), Punkt 22: "Statische Member-Klassen über nicht-statische favorisieren" ausführlich behandelt.

Eine kurze Zusammenfassung:

  1. Eine innere Klasse sollte keinen Zugriff auf eine äußere Klasseninstanz haben, es sei denn, dieser Zugriff ist erforderlich, d. h. innere Klassen sollten standardmäßig statisch sein. Edit: Um technisch zu werden, ruft Effective Java diese statischen Memberklassen auf, im Gegensatz zu inneren Klassen , und verwendet den Begriff geschachtelte Klasse , um beide zu umfassen die statischen und nicht statischen Versionen.
  2. Eine äußere Klasse hat immer Zugriff auf die Mitglieder ihrer innner Klasse, selbst wenn diese Mitglieder privat sind. Auf diese Weise kann sich eine innere Klasse nur ihrer äußeren Klasse aussetzen.
  3. "Eine innere Klasse sollte nur existieren, um ihrer äußeren Klasse zu dienen."

Persönlich bin ich geneigt, eine innere Klasse zu implementieren, wenn dies zulässt, dass die Konstruktoren der inneren Klasse privat sind, d. h. wenn eine Klasse nur von einer anderen (äußeren) Klasse instanziiert werden kann. Jede zusätzliche Einkapselung, wie z. B. die Privatisierung der gesamten inneren Klasse, ist wünschenswert. aber öffentliche innere Klassen sind vollkommen akzeptabel. In Java gibt es viele Beispiele, z. B. AbstractMap.SimpleEntry.

    
jaco0646 07.11.2013, 01:26
quelle

Tags und Links