32 / 32 / 3
Регистрация: 25.05.2014
Сообщений: 1,137
|
|
1 | |
Как объявить статический класс?14.08.2015, 16:43. Показов 4245. Ответов 20
Метки нет (Все метки)
В Android Studio заметил интересную вещь, есть некий класс (AlertDialog.Builder), объявлен как static, но в то же время можно создавать его экземпляр. Как такое может быть? Я знаком со статическими полями, методами, а вот можно ли объявлять весь класс статическим? Пробовал сделать это в Eclipse-подчеркивает красным, не дает. Помогите пожалуйста разобраться
0
|
14.08.2015, 16:43 | |
Ответы с готовыми решениями:
20
Как правильно объявить статический метод Как объявить статический метод класса? Как лучше объявить статический список или массив Полиморфизм. Как в предке объявить статический массив, который можно будет использовать в наследниках? |
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
|
|
14.08.2015, 17:26 | 2 |
danek130995, http://stackoverflow.com/a/7486111
1
|
32 / 32 / 3
Регистрация: 25.05.2014
Сообщений: 1,137
|
|
14.08.2015, 20:48 [ТС] | 3 |
Spelcrawler, я прочитал, это симуляция статического класса, но ведь тут нету самого идентификатора static в объявлении класса, класс просто называется public final class MyStaticClass. А в Android Studio есть явный пример- public static class Builder {...}
0
|
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
|
|
14.08.2015, 22:02 | 4 |
1
|
32 / 32 / 3
Регистрация: 25.05.2014
Сообщений: 1,137
|
|
14.08.2015, 22:09 [ТС] | 6 |
Spelcrawler, Netscape, а вот в чем дело, только внутренний класс.. Спасибо! Хотя смысла не вижу в нем
0
|
266 / 242 / 96
Регистрация: 11.01.2015
Сообщений: 673
|
|
15.08.2015, 00:29 | 7 |
Смысл в том, что его экземпляр не имеет ссылку на внешний класс(при создании)
1
|
32 / 32 / 3
Регистрация: 25.05.2014
Сообщений: 1,137
|
|
15.08.2015, 09:56 [ТС] | 8 |
Mikalai, извините, не совсем понятно. Так всегда вроде только переменная супер класса может ссылаться на объект подкласса, как понять экземпляр не имеет ссылку на внешний класс? Или вы имеете ввиду на любой другой внешний класс?
0
|
266 / 242 / 96
Регистрация: 11.01.2015
Сообщений: 673
|
|
15.08.2015, 10:53 | 9 |
Сообщение было отмечено danek130995 как решение
Решение
Вложенный нестатический класс – это класс, который объявлен как нестатический член окружающего класса. Если статический вложенный класс принадлежал всему классу, то нестатический вложенный класс всегда связан с конкретным экземпляром окружающего класса.
1
|
32 / 32 / 3
Регистрация: 25.05.2014
Сообщений: 1,137
|
|||||||||||
15.08.2015, 12:20 [ТС] | 10 | ||||||||||
Mikalai, это теперь понятно. Но я сейчас попытался в Eclipse создать экземпляр вложенного нестатического класса-у меня не получилось, а создать экземпляр вложенного статического-получилось, странно.
Если же me2 объявить как static, то работает. Почему так?
0
|
266 / 242 / 96
Регистрация: 11.01.2015
Сообщений: 673
|
|||||||||||
15.08.2015, 12:36 | 11 | ||||||||||
Сообщение было отмечено danek130995 как решение
Решение
Описываем внутренний класс
1
|
32 / 32 / 3
Регистрация: 25.05.2014
Сообщений: 1,137
|
|
15.08.2015, 13:14 [ТС] | 12 |
Mikalai, точно, забыл еще один new. Спасибо! И как я понял, если бы Ваш класс Third был объявлен как static, то он принадлежал бы всему внешнему классу(т.е. к нему можно было бы обратиться из любого экземпляра и он был бы одним и тем же для всех экземпляров), а в данной ситуации Third принадлежит только экземпляру, ссылка на который-third, и для каждого экземпляра будет новый Third, правильно?
0
|
266 / 242 / 96
Регистрация: 11.01.2015
Сообщений: 673
|
|
15.08.2015, 13:21 | 13 |
Да. Это так.
1
|
32 / 32 / 3
Регистрация: 25.05.2014
Сообщений: 1,137
|
|||||||||||
15.08.2015, 13:35 [ТС] | 14 | ||||||||||
Mikalai, опять вопрос появился - а ежели static класс един для всех экземпляров, зачем тогда создавать его экземпляр?
Mikalai, сейчас попробовал обратиться к переменной-члену класса me2 -в первом случае получилось, во втором ее не видит. Стало быть, во втором случае создается только экземпляр внешнего класса, и нельзя получить доступ к подклассу, а в первом случае создаются экземпляры обеих классов?
0
|
32 / 32 / 3
Регистрация: 25.05.2014
Сообщений: 1,137
|
|
15.08.2015, 17:10 [ТС] | 17 |
Mikalai, почитал. Сейчас объявил два экземпляра статического класса- и в одном из них изменил значение переменной-члена. Судя по тому, что класс "статичен", значение переменной должно было поменяться и в другом "экземпляре", но оно почему то не поменялось.. Странно
0
|
266 / 242 / 96
Регистрация: 11.01.2015
Сообщений: 673
|
|
15.08.2015, 18:15 | 18 |
danek130995, StaticNestedClass и singleton - это разные вещи. StaticNestedClass просто не привязан к конкретному объекту его обрамляющего класса(OuterClass). Но это не значит, что у него существует только один экземпляр(для этого используют шаблон проектирования singleton). Вот тут можно прочитать про то, что StaticNestedClass ведёт себя как top-level class, который был вложен в другой класс верхнего уровня для удобства упаковки(packaging convenience).
1
|
32 / 32 / 3
Регистрация: 25.05.2014
Сообщений: 1,137
|
|
15.08.2015, 21:55 [ТС] | 19 |
Mikalai, что то я потерялся, мне кажется я совсем понимаю вот что: что вы имееете ввиду под
Можете привести пример, как понять привязан/не привязан?
0
|
266 / 242 / 96
Регистрация: 11.01.2015
Сообщений: 673
|
|
15.08.2015, 23:26 | 20 |
Статический внутренний класс должен обращаться к нестатическим членам своего внешнего класса при помощи объекта, т.е. он не может обращаться напрямую на нестатические члены своего внешнего класса(тоесть объект внемшего класса не создаётся)
Внутренний класс(non-static) имеет доступ ко всем переменным и методам своего внешнего класса и может непосредственно ссылаться на них(значит объект внешнего класса создаётся и существует, как минимум, пока существует объект внутреннего класса). Если вам понадобится получить ссылку на объект внешнего класса, запишите имя внешнего класса, за которым следует точка, а затем ключевое слово this. information
2
|
15.08.2015, 23:26 | |
15.08.2015, 23:26 | |
Помогаю со студенческими работами здесь
20
Почему нельзя объявить в описание класса статический double? Статический класс как уровень доступа к БД Объявить статический массив размерности 20. Заполнить его «случайным образом»... Как преобразовать приведенный код в статический класс Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |