|
|
|
Несколько вопросов по Java
|
|||
|---|---|---|---|
|
#18+
Добрый день. Потихоньку самостоятельно постигаю Java и как-то так сложилось, что и спросить-то не у кого, а вопросы, хоть и простые, но периодически мучают. Буду благодарен, если поможете, даже если вам вопросы будут казаться верхом тупизма. 1. Где-то читал, что лучше всего всегда делать переменные private и для доступа к ним писать сеттеры и геттеры. Правда ли это? И стоит ли делать private переменные примитивных типов? 2. Если у меня есть класс-родитель А и два класса-наследника Аb и Ac. В обоих классах есть метод, который отличается только последней строчкой. Как лучше сделать - в классе-родителе создать метод, а последнюю строчку написать через Код: java 1. 2. 3. Или в классе-наследнике: Код: java 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 14:44 |
|
||
|
Несколько вопросов по Java
|
|||
|---|---|---|---|
|
#18+
1. Это считается правильным стилем. Потом можно будет переопределить методы и наворотить такого. 2. Ну дублировать код считается не хорошо. Особенно, при сопровождении. Любое дублирование может потом привести к расхождению. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 14:53 |
|
||
|
Несколько вопросов по Java
|
|||
|---|---|---|---|
|
#18+
По первому вопросу да - хотя не всегда нужен именно private, есть еше protected и default. Основное правило такое - если переменная объявлена в классе, то она и использоваться должна только в нем, чем больше ограничишь к ней доступ - тем лучше, тогда меньше шансовчто поддашься соблазну использовать ее из другого класса Timein2. Если у меня есть класс-родитель А и два класса-наследника Аb и Ac. В обоих классах есть метод, который отличается только последней строчкой. Как лучше сделать - в классе-родителе создать метод, а последнюю строчку написать через Код: java 1. 2. 3. Или в классе-наследнике: Код: java 1. 2. 3. 4. Тут тонкий момент, даже опытные люди не всегда ответят правильно, все должно придти с опытом. Наследование надо применять хорошо подумав. Приведи конкретный пример - тогда смоем понятнее ответить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 15:07 |
|
||
|
Несколько вопросов по Java
|
|||
|---|---|---|---|
|
#18+
Timein1. Где-то читал, что лучше всего всегда делать переменные private и для доступа к ним писать сеттеры и геттеры. Правда ли это? И стоит ли делать private переменные примитивных типов? Это правило для новичков, которые ещё не постигли инкапсуляцию. Потому как новички часто её нарушают, то код с вызовом кучей полей становится невозможно дебажить и рефакторить. Свойства в отличие от полей обладают полиморфизмом. В код со свойствами проще воткнуть дополнительную логику, если она вдруг не была предусмотрена изначально. Когда программист поймёт инкапсуляцию и научится её поддерживать в коде, тогда повальная надобность в акцессорах отпадёт и будет понимание где они нужны, а где нет. Timein2. Если у меня есть класс-родитель А и два класса-наследника Аb и Ac. В обоих классах есть метод, который отличается только последней строчкой. Как лучше сделать - в классе-родителе создать метод, а последнюю строчку написать через Код: java 1. 2. 3. Это путь вникуда. Если в коде появился instanceof, и вы не пишете фреймверк, значит что-то пошло не так. Это прямое нарушение полиморфизма. У горе архитекторов такой код выливается в Код: java 1. 2. 3. 4. 5. 6. 7. Причем в разных местах кода. Timein Код: java 1. 2. 3. 4. 5. 6. Да, уже лучше. Для работы с наследованием надо изучить два вопроса - Liskov substitution principle - Наследование vs Композиции и почему там где часто пишут наследование лучше было бы сделать композицию. Ну и в качестве дополнительного задания со звездочкой рассмотреть Template Method pattern. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 15:11 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=104&tid=2124351]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
23ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
3ms |
| others: | 207ms |
| total: | 298ms |

| 0 / 0 |
