Коротка відповідь:
- Назви методів не можуть відображати внутрішню реалізацію, а очікувану поведінку.
Довга відповідь:
haveChildren()слід назвати hasChildren().
Крім того, я не вважаю, що hasChildren()це обов'язково як геть для булевого члена класу. Я думаю, такий метод дозволить з’ясувати, чи є член типу Collectionпорожнім.
Ім'я за замовчуванням, яке IDE надає згенерованим геттерам і сетерам, не вважається законом, встановленим в камені.
Ще один момент: інтерфейси мають назви методів, які ще не реалізуються.
Якщо назви методів підлягають відображенню внутрішньої реалізації, яким чином хтось зможе коли-небудь створити інтерфейс? Інтерфейси не мають реалізації, і вони заздалегідь не знають, що робитимуть реалізатори під кришкою.
Візьмемо для прикладу Iteratorінтерфейс на Java.
Коли ви реалізуєте Iterator, навіть коли у вас є ім'я булевого члена next, ви не можете перейменовувати hasNext()в isNext()або isHavingNext(). Це деталізація реалізації. Насправді я реалізував, Iteratorі те, що я роблю, - це член типу того, що в моєму класі є список, названий next(не булевим). hasNext()потім повертається next!=null.
Також дивіться це:
class patient {
private boolean pulse;
private boolean breaths:
public boolean isDead(){ return (!pulse & !breaths);}
}
Зауважте, що isDead()це не нормальний дім.
Візьміть інструменти продуктивності IDE, якими вони є.
parentпрацювало б.