powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Несколько вопросов по Java
4 сообщений из 4, страница 1 из 1
Несколько вопросов по Java
    #39174265
Timein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Потихоньку самостоятельно постигаю Java и как-то так сложилось, что и спросить-то не у кого, а вопросы, хоть и простые, но периодически мучают. Буду благодарен, если поможете, даже если вам вопросы будут казаться верхом тупизма.
1. Где-то читал, что лучше всего всегда делать переменные private и для доступа к ним писать сеттеры и геттеры. Правда ли это? И стоит ли делать private переменные примитивных типов?

2. Если у меня есть класс-родитель А и два класса-наследника Аb и Ac. В обоих классах есть метод, который отличается только последней строчкой. Как лучше сделать - в классе-родителе создать метод, а последнюю строчку написать через
Код: java
1.
2.
3.
if (main instanceof Ab){
//описание действия
}


Или в классе-наследнике:
Код: java
1.
2.
3.
4.
public void Metod(){
     super.Metod();
//Действие
 }
...
Рейтинг: 0 / 0
Несколько вопросов по Java
    #39174287
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Это считается правильным стилем. Потом можно будет переопределить методы и наворотить такого.
2. Ну дублировать код считается не хорошо. Особенно, при сопровождении. Любое дублирование может потом привести к расхождению.
...
Рейтинг: 0 / 0
Несколько вопросов по Java
    #39174312
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По первому вопросу да - хотя не всегда нужен именно private, есть еше protected и default. Основное правило такое - если переменная объявлена в классе, то она и использоваться должна только в нем, чем больше ограничишь к ней доступ - тем лучше, тогда меньше шансовчто поддашься соблазну использовать ее из другого класса

Timein2. Если у меня есть класс-родитель А и два класса-наследника Аb и Ac. В обоих классах есть метод, который отличается только последней строчкой. Как лучше сделать - в классе-родителе создать метод, а последнюю строчку написать через
Код: java
1.
2.
3.
if (main instanceof Ab){
//описание действия
}


Или в классе-наследнике:
Код: java
1.
2.
3.
4.
public void Metod(){
     super.Metod();
//Действие
 }



Тут тонкий момент, даже опытные люди не всегда ответят правильно, все должно придти с опытом. Наследование надо применять хорошо подумав. Приведи конкретный пример - тогда смоем понятнее ответить
...
Рейтинг: 0 / 0
Несколько вопросов по Java
    #39174322
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Timein1. Где-то читал, что лучше всего всегда делать переменные private и для доступа к ним писать сеттеры и геттеры. Правда ли это? И стоит ли делать private переменные примитивных типов?
Это правило для новичков, которые ещё не постигли инкапсуляцию. Потому как новички часто её нарушают, то код с вызовом кучей полей становится невозможно дебажить и рефакторить. Свойства в отличие от полей обладают полиморфизмом. В код со свойствами проще воткнуть дополнительную логику, если она вдруг не была предусмотрена изначально.

Когда программист поймёт инкапсуляцию и научится её поддерживать в коде, тогда повальная надобность в акцессорах отпадёт и будет понимание где они нужны, а где нет.

Timein2. Если у меня есть класс-родитель А и два класса-наследника Аb и Ac. В обоих классах есть метод, который отличается только последней строчкой. Как лучше сделать - в классе-родителе создать метод, а последнюю строчку написать через
Код: java
1.
2.
3.
if (main instanceof Ab){
//описание действия
}



Это путь вникуда. Если в коде появился instanceof, и вы не пишете фреймверк, значит что-то пошло не так. Это прямое нарушение полиморфизма. У горе архитекторов такой код выливается в
Код: java
1.
2.
3.
4.
5.
6.
7.
if (main instanceof Ab){
//описание действия
} else if (main instanceof Ac){
} else if (main instanceof Ba){
}
} else if (main instanceof Cd){
}



Причем в разных местах кода.

Timein
Код: java
1.
2.
3.
4.
5.
6.
Или в классе-наследнике:
[src java]
public void Metod(){
     super.Metod();
//Действие
 }


Да, уже лучше. Для работы с наследованием надо изучить два вопроса
- Liskov substitution principle
- Наследование vs Композиции и почему там где часто пишут наследование лучше было бы сделать композицию.

Ну и в качестве дополнительного задания со звездочкой рассмотреть Template Method pattern.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Несколько вопросов по Java
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]