2010-07-12 4 views
4

Я новая рыба в Android-разработке. Читая книги и исходный код Android, я узнал, что в приложении Android так много внутренних классов. Почему Android нуждается в таком количестве внутренних классов?Почему так много внутренних классов в Android?

Я смущен этими внутренними классами.

+0

предоставить полное описание о том, что вы подразумеваете под «внутренним классом» в android –

+7

Я смущен вашей путаницей. – Qberticus

ответ

7

Они часто являются наиболее эффективным способом реализации дизайна.

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

+3

Тем не менее, лучше, если бы эти члены были вместо private, чтобы избежать дополнительных методов доступа, созданных под капотом. – yanchenko

2

Я предполагаю, что вы раньше делали C/C++. Эти внутренние классы не специфичны для Android. Они происходят из Java. В Java стеки (которые в C/C++ мы живем) не существуют одинаково. Подумайте о байтовом коде Java как blob бинарного исполняемого файла, который существует внутри одной функции (вроде как писать весь ваш код внутри основной функции в C/C++). Но Java позволяет вам быть «Object Oriented» и локализовать ваш код в классах для разных задач. Он также позволяет вам выводить из другого класса и создавать его одновременно. Это то, что вы видите во всех примерах. Ссылка, предоставленная «Macarse», объясняет это для Java-программиста.

0

Это также может вас заинтересовать:

Android: AsyncTask recommendations: private class or public class?

Сво не о том, почему, но предпочтительный является внутренними или Outter классов для AsyncTasks, один из наиболее склонных классов, которые будут использоваться в качестве внутренних.

3

Проще говоря, при переводе на байт-код внутренние классы «перестроены» как внешние классы в одном пакете. Это означает, что любой класс в пакете может получить доступ к этому внутреннему классу. Собственные/закрытые поля владельца/отца классов превращаются в защищенные поля, так как они доступны внешнему внутреннему классу.

OWASP Recommendation

Так в основном, это просто «ярлык», что ставит под угрозу безопасность вашего собственного дизайна.

Итак, в этом смысле Android не нужен.

Смежные вопросы