Страница 1 из 5
Непонятное поведение protected
Добавлено: 03 дек 2013, 13:52
AlexeyFedor
Пишем новый класс например такой
Код: Выделить всё
public class First {
protected int a;
private int b;
}
Далее используем его в активити.
переменная b как и положено дает ошибку "переменная не видима"
а вот переменная а видится прекрасно, хотя такого не должно быть. Если обе переменные закрыть private, то нельзя создать наследника, где а и b будут использоваться.
Re: Непонятное поведение protected
Добавлено: 03 дек 2013, 15:53
AirAlchemiststart
Активити в том же пакете? Если "да" - тогда всё абсолютно нормально.
http://docs.oracle.com/javase/tutorial/ ... ntrol.html - читаем.
Re: Непонятное поведение protected
Добавлено: 04 дек 2013, 14:10
AlexeyFedor
Да так и есть в одном пакете. Дико звиняюсь. Как сделать, чтобы мои классы были в отдельной папочке например MyLibrariKlass. Чтобы я туда скадывал свои фантазии и не мучился с протектами и приватами. Просто подключал в активити при необходимости. Облазил всю сеть, так ничего и не получилось. Заранее спс, если можно обьясните на уровне колбасы, куда нажать, что увижу, где галочку поставить.
Re: Непонятное поведение protected
Добавлено: 04 дек 2013, 15:05
Nik
AlexeyFedor писал(а):Да так и есть в одном пакете. Дико звиняюсь. Как сделать, чтобы мои классы были в отдельной папочке например MyLibrariKlass. Чтобы я туда скадывал свои фантазии и не мучился с протектами и приватами. Просто подключал в активити при необходимости. Облазил всю сеть, так ничего и не получилось. Заранее спс, если можно обьясните на уровне колбасы, куда нажать, что увижу, где галочку поставить.
возможно в библиотеку. но не уверен. недавно программирую
Re: Непонятное поведение protected
Добавлено: 04 дек 2013, 15:53
AirAlchemiststart
Кликаем правой кнопкой мыши по проекту в среде разработки (к примеру, в Eclipse - в окне Package Explorer, в IDEA - Project) и выбираем в появившемся контекстном меню пункт "New" - "Package".
Для упрощения понимания - мы создаём своеобразную папку со своими правами доступа. Вот туда путём просто перетаскивания мышью и можно поместить все свои дополнительные классы.
Начинающим же рекомендую в начале не заморачиваться с инкапсуляцией и делать всё public. По мере получения опыта читаем про ту же инкапсуляцию, про геттеры и сеттеры и т.д.
Re: Непонятное поведение protected
Добавлено: 12 фев 2014, 10:21
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
Но как любой объект в системе может изменить баланс, если он не знает имя переменной? Ну или адреса в памяти, если правильнее... Ведь по сути только хакерские программы будут иметь намерение менять что-то за пределами "своей компетенции", как мне кажется.
Вот не понимаю, да. Но хочу.
Re: Непонятное поведение protected
Добавлено: 12 фев 2014, 12:04
altwin
KameoMika писал(а):
Но как любой объект в системе может изменить баланс, если он не знает имя переменной? Ну или адреса в памяти, если правильнее... Ведь по сути только хакерские программы будут иметь намерение менять что-то за пределами "своей компетенции", как мне кажется..
Это основы ООП, вам нужно не много разобраться с Java, дальше будет очень трудно без этого.
Принципы (свойства) ООП: инкапсуляция для чайников
Re: Непонятное поведение protected
Добавлено: 12 фев 2014, 12:28
klblk
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):

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

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

но тем не менее) написание opensource библиотек
- заранее приучаться с заделом на возможную будущую работу в команде
- предотвращение путаницы и возможность использовать private переменные/функции с одинаковыми именами в разных классах (это ведь можно? я правильно понимаю?

)
- банальное удобство, когда "хотите обращаться к переменной класса, из любого другого класса делаете ее public, если переменная нужна только внутри класса, и извне к ней доступ не нужен [...], то делаете ее private
Re: Непонятное поведение protected
Добавлено: 12 фев 2014, 15:03
anber
Есть мнение что напрямую обращаться из других классов следует только к константам, типа public static final String SOME_CONSTANT = "asdf";, ну и к методам разумеется, но не к изменяем полям.
Все остальные делать приватными и если нужен к ним доступ делать getеры. Если очень нужная запись то еще и setеры.
Re: Непонятное поведение protected
Добавлено: 12 фев 2014, 15:07
Mikhail_dev
Вы всё поняли, английский у вас на высоте, но при этом задаете вопросы про
- предотвращение путаницы и возможность использовать private переменные/функции с одинаковыми именами в разных классах (это ведь можно? я правильно понимаю?

)
- банальное удобство, когда "хотите обращаться к переменной класса, из любого другого класса делаете ее public, если переменная нужна только внутри класса, и извне к ней доступ не нужен [...], то делаете ее private
Изучите лучше Java как язык (например Брюс Эккель "Философия Java"). Все вопросы отпадут сами собой.
Re: Непонятное поведение protected
Добавлено: 12 фев 2014, 15:39
KameoMika
m090050 писал(а):Изучите лучше Java как язык (например Брюс Эккель "Философия Java"). Все вопросы отпадут сами собой.
Хм, не знаю, были ли первые строки насмешкой (про английский и "вы все поняли"), но приму как констатацию факта, пожалуй.
Что же насчет Java, я наверное отношусь к тем "быдлокодерам", про которых у вас написано в подписи. Нет, я никогда не оставлю код плохим, если вдруг могу сделать лучше, но изучать что-то, что мне не интересно - желания нет никакого. Java в моем понимании изначально компьютерный язык, а создание программ для компьютера привлекает чуть менее чем никак. Уже сейчас в более продвинутых компаниях место ПК занимают планшеты, а если взять еще и нацеленность Windows 8 на оба фронта.... Думаю еще лет 5-7 и ПК не станет как класса, вообще.
Если существует книга/сайт/другой источник, где Java-программирование под Андроид давалось бы полностью с нуля и
не вмешивая чистые PC-методы, классы, интерфейсы и т.д. - буду счастлива, если посоветуете. Изучу от и до.
Но я таковых не нашла.
Re: Непонятное поведение protected
Добавлено: 12 фев 2014, 16:04
Mikhail_dev
Хм, не знаю, были ли первые строки насмешкой (про английский и "вы все поняли"),
Это и есть констатация факта, если сделать недвусмысленное заключение из того, что вы написали в своих прошлых комментариях.
По предложенной ссылочке сходила, все перечитала в разделе ООП для чайников. Очень хорошо и понятно пишет человек! (хотя и не вынесла ничего принципиально нового)
Еще бы вот только не русский псевдоязык, а нормальный аглицкий - было бы вообще чудесно.
Что касается остального
Нет, я никогда не оставлю код плохим, если вдруг могу сделать лучше
Вы серьезно можете назвать неплохим код, не зная основ языка? Вы уж тогда не стесняйтесь
быдлокодеры без кавычек писать.
Java в моем понимании изначально компьютерный язык, а создание программ для компьютера привлекает чуть менее чем никак. Уже сейчас в более продвинутых компаниях место ПК занимают планшеты, а если взять еще и нацеленность Windows 8 на оба фронта.... Думаю еще лет 5-7 и ПК не станет как класса, вообще.
Компьютерный язык
НЕ ОЗНАЧАЕТ для PC. Откуда такое умозаключение? Java язык для веба (браузеры), Android платформы, десктопов, программирования микроконтроллеров. И это не всё, что я перечислил.
И ПК не вымрут, как вы их не хороните. Это вопрос маркетинга. Вот нетбуки вымрут, потому как нишу заняли нерпавильную (их займут планшеты и лаптопы), а вот PC не дождетесь.
Если существует книга/сайт/другой источник, где Java-программирование под Андроид давалось бы полностью с нуля и не вмешивая чистые PC-методы, классы, интерфейсы и т.д. - буду счастлива, если посоветуете. Изучу от и до.
Уже дал в прошлом сообщении.
Но я таковых не нашла.
Поэтому что-то объяснять вам трудно.
Вы просто возьмите и прочитайте хотя бы ту книгу, где не написано про PC
Re: Непонятное поведение protected
Добавлено: 12 фев 2014, 16:12
Foenix
При объявлении переменной класса public вы по сути передаете управление ею кому-то другому. По-правильному, нужно для изменения переменной класса использовать соответсвующие методы класса для того, чтоб класс полностью контролировал что и как внутри него меняется.
Например, у класса, движущего троллейбус никогда не будет паблик переменной, задающей угол вращения руля или скорость вращения колес. У класса, описывающего запуск самолета или ракеты - никогда не будет паблик-переменных задающих то, что там щелкает себе пилот, и даже регулировать наклон спинки кресел пассажиров.
Вот примерно такой смысл. Так что даже начинающим не стоит делать public переменные классов без четкого понимания - зачем.
Re: Непонятное поведение protected
Добавлено: 12 фев 2014, 16:38
KameoMika
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
Возьму, да, посмотрю. Если это именно то, моя вам огромнейшая благодарность.
Re: Непонятное поведение protected
Добавлено: 12 фев 2014, 16:43
KameoMika
Foenix, ваш пост - одно из наиболее четких и понятных разъяснений по использованию public!

Re: Непонятное поведение protected
Добавлено: 12 фев 2014, 16:45
Foenix
кажется в браузерах используется java stript, это вообще не java даже сбоку
Re: Непонятное поведение protected
Добавлено: 12 фев 2014, 16:46
Foenix
KameoMika писал(а):Foenix, ваш пост - одно из наиболее четких и понятных разъяснений по использованию public!

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