Непонятное поведение protected

AlexeyFedor
Сообщения: 31
Зарегистрирован: 03 сен 2013, 14:26

Непонятное поведение protected

Сообщение AlexeyFedor » 03 дек 2013, 13:52

Пишем новый класс например такой

Код: Выделить всё

public class First {
 protected int a; 
 private int b;
}
Далее используем его в активити.

Код: Выделить всё

First fir=new First();
		fir.a=10;
		fir.b=20;
переменная b как и положено дает ошибку "переменная не видима"
а вот переменная а видится прекрасно, хотя такого не должно быть. Если обе переменные закрыть private, то нельзя создать наследника, где а и b будут использоваться.

AirAlchemiststart
Сообщения: 14
Зарегистрирован: 09 ноя 2013, 22:57

Re: Непонятное поведение protected

Сообщение AirAlchemiststart » 03 дек 2013, 15:53

Активити в том же пакете? Если "да" - тогда всё абсолютно нормально.

http://docs.oracle.com/javase/tutorial/ ... ntrol.html - читаем.

AlexeyFedor
Сообщения: 31
Зарегистрирован: 03 сен 2013, 14:26

Re: Непонятное поведение protected

Сообщение AlexeyFedor » 04 дек 2013, 14:10

Да так и есть в одном пакете. Дико звиняюсь. Как сделать, чтобы мои классы были в отдельной папочке например MyLibrariKlass. Чтобы я туда скадывал свои фантазии и не мучился с протектами и приватами. Просто подключал в активити при необходимости. Облазил всю сеть, так ничего и не получилось. Заранее спс, если можно обьясните на уровне колбасы, куда нажать, что увижу, где галочку поставить.

Nik
Сообщения: 63
Зарегистрирован: 08 ноя 2013, 21:17
Откуда: Pyatigorsk
Контактная информация:

Re: Непонятное поведение protected

Сообщение Nik » 04 дек 2013, 15:05

AlexeyFedor писал(а):Да так и есть в одном пакете. Дико звиняюсь. Как сделать, чтобы мои классы были в отдельной папочке например MyLibrariKlass. Чтобы я туда скадывал свои фантазии и не мучился с протектами и приватами. Просто подключал в активити при необходимости. Облазил всю сеть, так ничего и не получилось. Заранее спс, если можно обьясните на уровне колбасы, куда нажать, что увижу, где галочку поставить.
возможно в библиотеку. но не уверен. недавно программирую

AirAlchemiststart
Сообщения: 14
Зарегистрирован: 09 ноя 2013, 22:57

Re: Непонятное поведение protected

Сообщение AirAlchemiststart » 04 дек 2013, 15:53

Кликаем правой кнопкой мыши по проекту в среде разработки (к примеру, в Eclipse - в окне Package Explorer, в IDEA - Project) и выбираем в появившемся контекстном меню пункт "New" - "Package".
Для упрощения понимания - мы создаём своеобразную папку со своими правами доступа. Вот туда путём просто перетаскивания мышью и можно поместить все свои дополнительные классы.

Начинающим же рекомендую в начале не заморачиваться с инкапсуляцией и делать всё public. По мере получения опыта читаем про ту же инкапсуляцию, про геттеры и сеттеры и т.д.

KameoMika
Сообщения: 9
Зарегистрирован: 12 фев 2014, 03:22

Re: Непонятное поведение protected

Сообщение KameoMika » 12 фев 2014, 10:21

AirAlchemiststart писал(а):Начинающим же рекомендую в начале не заморачиваться с инкапсуляцией и делать всё public.
Вот совсем начинающая, едва только 9 урок прошла. Но все же спрошу, из-за врожденного любопытства постоянно лезть в самые дебри :) ...
Какой вообще смысл в этих private, public, protected?
Нашла вот что (тут):
We have declared our string and integer to be public. This means that any object in the system can change the balance (setting it to zero, or even giving us a negative balance). This could cause the program to fall over
Но как любой объект в системе может изменить баланс, если он не знает имя переменной? Ну или адреса в памяти, если правильнее... Ведь по сути только хакерские программы будут иметь намерение менять что-то за пределами "своей компетенции", как мне кажется.
Вот не понимаю, да. Но хочу.

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Непонятное поведение protected

Сообщение altwin » 12 фев 2014, 12:04

KameoMika писал(а): Но как любой объект в системе может изменить баланс, если он не знает имя переменной? Ну или адреса в памяти, если правильнее... Ведь по сути только хакерские программы будут иметь намерение менять что-то за пределами "своей компетенции", как мне кажется..
Это основы ООП, вам нужно не много разобраться с Java, дальше будет очень трудно без этого. Принципы (свойства) ООП: инкапсуляция для чайников
Изображение

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Непонятное поведение protected

Сообщение klblk » 12 фев 2014, 12:28

KameoMika писал(а):
AirAlchemiststart писал(а):Начинающим же рекомендую в начале не заморачиваться с инкапсуляцией и делать всё public.
Вот совсем начинающая, едва только 9 урок прошла. Но все же спрошу, из-за врожденного любопытства постоянно лезть в самые дебри :) ...
Какой вообще смысл в этих private, public, protected?
Нашла вот что (тут):
We have declared our string and integer to be public. This means that any object in the system can change the balance (setting it to zero, or even giving us a negative balance). This could cause the program to fall over
Но как любой объект в системе может изменить баланс, если он не знает имя переменной? Ну или адреса в памяти, если правильнее... Ведь по сути только хакерские программы будут иметь намерение менять что-то за пределами "своей компетенции", как мне кажется.
Вот не понимаю, да. Но хочу.
Убивает не пистолет, а тот кто из него стреляет. Не объект получает доступ к переменным и функциям, а программист, который их хочет использовать. Если хотите обращаться к переменной класса, из любого другого класса делаете ее public, если переменная нужна только внутри класса, и из вне к ней доступ не нужен и/или противопоказан, то делаете ее private. Особенно это важно при написании библиотеки или если над проектом работает больше одного человека.
табличка (Глава 9):
Изображение

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Непонятное поведение protected

Сообщение altwin » 12 фев 2014, 12:48

klblk писал(а):
Убивает не пистолет, а тот кто из него стреляет. Не объект получает доступ к переменным и функциям, а программист,
поэтому мне очень нравится цитата по ссылке в прошлом моем сообщении:
Инкапсуляция (по-русски: «сокрытие») — это свойство объектов скрывать некоторые свои данные и способы их обработки (методы) от окружающей его цифровой среды и, в частности, от кривых ручонок малоопытных программистов...
:mrgreen:
Изображение

KameoMika
Сообщения: 9
Зарегистрирован: 12 фев 2014, 03:22

Re: Непонятное поведение protected

Сообщение KameoMika » 12 фев 2014, 14:45

altwin, klblk огромное спасибо за объяснения!))
По предложенной ссылочке сходила, все перечитала в разделе ООП для чайников. Очень хорошо и понятно пишет человек! (хотя и не вынесла ничего принципиально нового) Еще бы вот только не русский псевдоязык, а нормальный аглицкий - было бы вообще чудесно.
Ну и всего три статьи, тоже печалит....

Для себя, благодаря вам, определила несколько причин для использования модификаторов:
- заранее приучаться с заделом на возможное будущее (далекое, да :lol: но тем не менее) написание opensource библиотек
- заранее приучаться с заделом на возможную будущую работу в команде
- предотвращение путаницы и возможность использовать private переменные/функции с одинаковыми именами в разных классах (это ведь можно? я правильно понимаю? :oops: )
- банальное удобство, когда "хотите обращаться к переменной класса, из любого другого класса делаете ее public, если переменная нужна только внутри класса, и извне к ней доступ не нужен [...], то делаете ее private

Аватара пользователя
anber
Сообщения: 584
Зарегистрирован: 10 июн 2013, 15:05
Откуда: UA

Re: Непонятное поведение protected

Сообщение anber » 12 фев 2014, 15:03

Есть мнение что напрямую обращаться из других классов следует только к константам, типа public static final String SOME_CONSTANT = "asdf";, ну и к методам разумеется, но не к изменяем полям.
Все остальные делать приватными и если нужен к ним доступ делать getеры. Если очень нужная запись то еще и setеры.
Последний раз редактировалось anber 12 фев 2014, 15:08, всего редактировалось 1 раз.
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Непонятное поведение protected

Сообщение Mikhail_dev » 12 фев 2014, 15:07

Вы всё поняли, английский у вас на высоте, но при этом задаете вопросы про
- предотвращение путаницы и возможность использовать private переменные/функции с одинаковыми именами в разных классах (это ведь можно? я правильно понимаю? :oops: )
- банальное удобство, когда "хотите обращаться к переменной класса, из любого другого класса делаете ее public, если переменная нужна только внутри класса, и извне к ней доступ не нужен [...], то делаете ее private
Изучите лучше Java как язык (например Брюс Эккель "Философия Java"). Все вопросы отпадут сами собой.

KameoMika
Сообщения: 9
Зарегистрирован: 12 фев 2014, 03:22

Re: Непонятное поведение protected

Сообщение KameoMika » 12 фев 2014, 15:39

m090050 писал(а):Изучите лучше Java как язык (например Брюс Эккель "Философия Java"). Все вопросы отпадут сами собой.
Хм, не знаю, были ли первые строки насмешкой (про английский и "вы все поняли"), но приму как констатацию факта, пожалуй.

Что же насчет Java, я наверное отношусь к тем "быдлокодерам", про которых у вас написано в подписи. Нет, я никогда не оставлю код плохим, если вдруг могу сделать лучше, но изучать что-то, что мне не интересно - желания нет никакого. Java в моем понимании изначально компьютерный язык, а создание программ для компьютера привлекает чуть менее чем никак. Уже сейчас в более продвинутых компаниях место ПК занимают планшеты, а если взять еще и нацеленность Windows 8 на оба фронта.... Думаю еще лет 5-7 и ПК не станет как класса, вообще.
Если существует книга/сайт/другой источник, где Java-программирование под Андроид давалось бы полностью с нуля и не вмешивая чистые PC-методы, классы, интерфейсы и т.д. - буду счастлива, если посоветуете. Изучу от и до.
Но я таковых не нашла.

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Непонятное поведение protected

Сообщение Mikhail_dev » 12 фев 2014, 16:04

Хм, не знаю, были ли первые строки насмешкой (про английский и "вы все поняли"),
Это и есть констатация факта, если сделать недвусмысленное заключение из того, что вы написали в своих прошлых комментариях.
По предложенной ссылочке сходила, все перечитала в разделе ООП для чайников. Очень хорошо и понятно пишет человек! (хотя и не вынесла ничего принципиально нового)
Еще бы вот только не русский псевдоязык, а нормальный аглицкий - было бы вообще чудесно.
Что касается остального
Нет, я никогда не оставлю код плохим, если вдруг могу сделать лучше
Вы серьезно можете назвать неплохим код, не зная основ языка? Вы уж тогда не стесняйтесь быдлокодеры без кавычек писать.
Java в моем понимании изначально компьютерный язык, а создание программ для компьютера привлекает чуть менее чем никак. Уже сейчас в более продвинутых компаниях место ПК занимают планшеты, а если взять еще и нацеленность Windows 8 на оба фронта.... Думаю еще лет 5-7 и ПК не станет как класса, вообще.
Компьютерный язык НЕ ОЗНАЧАЕТ для PC. Откуда такое умозаключение? Java язык для веба (браузеры), Android платформы, десктопов, программирования микроконтроллеров. И это не всё, что я перечислил.
И ПК не вымрут, как вы их не хороните. Это вопрос маркетинга. Вот нетбуки вымрут, потому как нишу заняли нерпавильную (их займут планшеты и лаптопы), а вот PC не дождетесь.
Если существует книга/сайт/другой источник, где Java-программирование под Андроид давалось бы полностью с нуля и не вмешивая чистые PC-методы, классы, интерфейсы и т.д. - буду счастлива, если посоветуете. Изучу от и до.
Уже дал в прошлом сообщении.
Но я таковых не нашла.
Поэтому что-то объяснять вам трудно.
Вы просто возьмите и прочитайте хотя бы ту книгу, где не написано про PC

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Непонятное поведение protected

Сообщение Foenix » 12 фев 2014, 16:12

При объявлении переменной класса public вы по сути передаете управление ею кому-то другому. По-правильному, нужно для изменения переменной класса использовать соответсвующие методы класса для того, чтоб класс полностью контролировал что и как внутри него меняется.
Например, у класса, движущего троллейбус никогда не будет паблик переменной, задающей угол вращения руля или скорость вращения колес. У класса, описывающего запуск самолета или ракеты - никогда не будет паблик-переменных задающих то, что там щелкает себе пилот, и даже регулировать наклон спинки кресел пассажиров.

Вот примерно такой смысл. Так что даже начинающим не стоит делать public переменные классов без четкого понимания - зачем.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

KameoMika
Сообщения: 9
Зарегистрирован: 12 фев 2014, 03:22

Re: Непонятное поведение protected

Сообщение KameoMika » 12 фев 2014, 16:38

m090050 писал(а):
Java в моем понимании изначально компьютерный язык, а создание программ для компьютера привлекает чуть менее чем никак.
Компьютерный язык НЕ ОЗНАЧАЕТ для PC. Откуда такое умозаключение?
Я может неправильно выразилась, вообще имела в виду это: While most Android applications are written in Java, there are many differences between the Java API and the Android API. (Wiki)
Встречала упоминания о т.н. Core Java, которую нужно знать базово (+потом учить Android SDK). Вот это - именно то, что признаю как необходимый минимум. А изучая какую-либо другую яву - вкладываешь в голову ненужные знания-пылесборники, которые просто не будут использоваться.
Думаю еще лет 5-7 и ПК не станет как класса, вообще.
И ПК не вымрут, как вы их не хороните. Это вопрос маркетинга. Вот нетбуки вымрут, потому как нишу заняли нерпавильную (их займут планшеты и лаптопы), а вот PC не дождетесь.
Я не буду спорить, ибо сейчас это всего лишь война точек зрения)) это ни к чему не приведет. Время покажет. Я просто объясняю причины своей нелюбви к той Java, которое в большинстве своем дается в книгах. НЕ ИЗНАЧАЛЬНОЙ Java. Не Core. Многочисленным модификациям и надстройкам, которые и используются в (цитата) "Java язык для веба (браузеры), [...] , десктопов, программирования микроконтроллеров" и прочих.
Если существует книга/сайт/другой источник, где Java-программирование под Андроид давалось бы полностью с нуля и не вмешивая чистые PC-методы, классы, интерфейсы и т.д. - буду счастлива, если посоветуете. Изучу от и до.
Уже дал в прошлом сообщении.
[...]
Вы просто возьмите и прочитайте хотя бы ту книгу, где не написано про PC
Возьму, да, посмотрю. Если это именно то, моя вам огромнейшая благодарность.
Последний раз редактировалось KameoMika 12 фев 2014, 16:47, всего редактировалось 1 раз.

KameoMika
Сообщения: 9
Зарегистрирован: 12 фев 2014, 03:22

Re: Непонятное поведение protected

Сообщение KameoMika » 12 фев 2014, 16:43

Foenix, ваш пост - одно из наиболее четких и понятных разъяснений по использованию public! ;)

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Непонятное поведение protected

Сообщение Foenix » 12 фев 2014, 16:45

кажется в браузерах используется java stript, это вообще не java даже сбоку
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Непонятное поведение protected

Сообщение Foenix » 12 фев 2014, 16:46

KameoMika писал(а):Foenix, ваш пост - одно из наиболее четких и понятных разъяснений по использованию public! ;)
спасибо, рада если пригодится, вспомнится в нужный момент)
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Непонятное поведение protected

Сообщение Mikhail_dev » 12 фев 2014, 17:12

Встречала упоминания о т.н. Core Java, которую нужно знать базово (+потом учить Android SDK). Вот это - именно то, что признаю как необходимый минимум. А изучая какую-либо другую яву - вкладываешь в голову ненужные знания-пылесборники,
Я понял вас. Отбросьте AWT, Swing, JavaBeans.
Я не буду спорить, ибо сейчас это всего лишь война точек зрения))
к сожалению, это не так: Acer и Asus прекратили производство нетбуков с 1 января 2013 года
кажется в браузерах используется java stript, это вообще не java даже сбоку
А JavaEE в чем обычно запускается? JSP (JSF и другие) внедряются в саму страничку как вариант, потом преобразуются в сервлет, который управляется сервером приложений.
Последний раз редактировалось Mikhail_dev 12 фев 2014, 17:24, всего редактировалось 1 раз.

Ответить