Задача решена, но в процессе решения сделал неосознанную ошибку и не могу помять этот момент:
Вот решение правильное:
for (Horse h:horses ) {
if(h.isFinished())countFinished++;
else{
System.out.println("Waiting for " + h.getName());
h.join();
}
}
А вот код, который не принял Валидатор, но который тоже работает:
for (Horse h:horses ) {
if(h.isFinished)countFinished++;
else{
System.out.println("Waiting for " + h.getName());
h.join();
}
}
Мой вопрос касается следующего: экземпляр Лошади в списке, судя по второму блоку кода, имеет поле h.isFinished и оно является Boolean (дебаггер подтверждает). Однако!!! Данное поле в классе Horse имеет доступ private и по всем правилам его не должно быть видно... а оно видно...
Предположение, о том, что данное поле может относиться к Родительскому классу Thread оказалось ошибочным - нет там таких полей.
Вопрос - откуда оно берется и почему программа корректно работает?
Кстати, класс Horse:
public static class Horse extends Thread {
private boolean isFinished;
public Horse(String name) {
super(name);
}
public boolean isFinished() {
return isFinished;
}
public void run() {
String s = "";
for (int i = 0; i < 1001; i++) { //delay
s += "" + i;
if (i == 1000) {
s = " has finished the race!";
System.out.println(getName() + s);
isFinished = true;
}
}
}
}