Мне трудно понять принцип замещения Лискова, и мне было интересно, нарушает ли следующий код принцип замещения Лискова?
public class Task {
String status = "Ready"; // One of "Ready", "Started", and "Closed"
public void setStatus(String newStatus) {
status = newStatus;
}
public void cancel() {
status = "Closed";
}
}
public class ProjectTask extends Task {
@Override
public void cancel() {
if (status.equals("Started")) {
throw new RuntimeException("Cannot cancel a started project task.");
}
super.cancel();
}
}
Я думаю, что это так, потому что подкласс не ведет себя как базовый класс при его замене, а также потому, что он генерирует исключение RunTimeException?
Я не совсем уверен, и мне было интересно, правильно ли мое предположение