Хрупкий базовый класс - обычная проблема с наследованием, которая применима к Java и любому другому языку, поддерживающему наследование.
В двух словах, базовый класс - это класс, от которого вы наследуете, и его часто называют хрупким, потому что изменения этого класса могут привести к неожиданным результатам в классах, которые от него наследуются.
Есть несколько способов смягчить это; но нет простого способа полностью избежать этого при использовании наследования. Вы можете предотвратить наследование других классов от класса, пометив объявление класса как final
в Java.
Лучший способ избежать наихудшей из этих проблем - пометить все классы как final, если вы специально не собираетесь наследовать от них. Для тех, кто намеревается наследовать, проектируйте их так, как будто вы разрабатываете API: скройте все детали реализации; строго относитесь к тому, что вы излучаете, и внимательно относитесь к тому, что вы принимаете, и подробно документируйте ожидаемое поведение класса.
Базовый класс называется хрупким, когда внесенные в него изменения нарушают производный класс.
class Base{
protected int x;
protected void m(){
x++;
}
protected void n(){
x++; // <- defect
m();
}
}
class Sub extends Base{
protected void m(){
n();
}
}