Если брать конкретно этот код, он не требует return, ведь он нарушает принцип единой ответственности. Метод daytime в вашем случае отвечает сразу за 2 действия - определение что выводим и его вывод. Правильно было бы иметь такой код:
static String daytime(int hour){
if (hour >24 || hour < 0)
throw new IllegalArgumentException("Bad argument");
if(hour > 21 || hour < 6)
return "Good night";
else if(hour >= 15)
return "Good evening";
else if(hour >= 11)
return "Good after noon";
else
return "Good morning";
}
А вывод должен осуществляться в методе main
ps в жизни не писал на джаве, если там косяки в синстаксисе, поправьте