Почему внешние классы Java могут получить доступ к внутренним членам парламента, не занимающим официального поста класса?

Корпоративный архитектор из Sparx утверждает, что может перепроектировать Java-код, включая создание диаграмм последовательности - см. Этот раздел руководства пользователя

можете записать сеанс отладки, а затем вы сгенерируете диаграмму последовательности из этого

Я не пробовал (хотя использовал EA в качестве инструмента моделирования), так что ymmv!

Есть бесплатный 30-дневный доступна загрузка оценки

168
задан Paŭlo Ebermann 9 November 2011 в 00:05
поделиться

5 ответов

Внутренний класс - это просто способ четко разделить некоторые функции, которые действительно принадлежат исходному внешнему классу. Они предназначены для использования, когда у вас есть 2 требования:

  1. Некоторая часть функциональности в вашем внешнем классе была бы наиболее понятной, если бы она была реализована в отдельном классе.
  2. Даже если она находится в отдельном классе, функциональность остается очень тесно связаны с тем, как работает внешний класс.

Учитывая эти требования, внутренние классы имеют полный доступ к своему внешнему классу. Поскольку они в основном являются членами внешнего класса,

79
ответ дан 23 November 2019 в 20:56
поделиться

Внутренний класс (для для целей контроля доступа), который считается частью содержащего класса. Это означает полный доступ ко всем частным лицам.

Это реализовано с использованием синтетических методов, защищенных пакетом: внутренний класс будет скомпилирован в отдельный класс в том же пакете (ABC $ XYZ).

52
ответ дан 23 November 2019 в 20:56
поделиться

Поскольку ваш метод main () находится в классе ABC , который может получить доступ к собственному внутреннему классу .

-2
ответ дан 23 November 2019 в 20:56
поделиться

Ограничения доступа устанавливаются для каждого класса. Метод, объявленный в классе, не может не иметь доступа ко всем членам экземпляра / класса. Само собой разумеется, что внутренние классы также имеют неограниченный доступ к членам внешнего класса, а внешний класс имеет неограниченный доступ к членам внутреннего класса.

3
ответ дан 23 November 2019 в 20:56
поделиться

Логика внутренних классов такова: внутренний класс во внешнем классе, потому что им нужно будет совместно использовать несколько вещей, и поэтому для них имеет смысл иметь большую гибкость, чем у "обычных" классов.

Если в вашем случае, для классов нет смысла видеть внутреннюю работу друг друга - что в основном означает, что внутренний класс можно было бы просто сделать обычным классом, вы можете объявить внутренний класс как статический класс XYZ . Использование static будет означать, что они не будут совместно использовать состояние (и, например, new ABC (). New XYZ () не будет работать, и вам нужно будет использовать new ABC.XYZ () .
Но в этом случае вам следует подумать о том, действительно ли XYZ должен быть внутренним классом и, возможно, он заслуживает своего собственного файла. Иногда имеет смысл создать статический внутренний класс (например, если вам нужен небольшой класс, реализующий интерфейс, который использует ваш внешний класс, и который больше нигде не поможет). Но примерно в половине случаев он должен был стать внешним классом.

3
ответ дан 23 November 2019 в 20:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: