它违反了封装。您不应该绕过父类的行为。有时能够绕过你自己班级的行为(特别是从同一方法中),而不是你父母的行为,这是有意义的。例如,假设我们有一个基本的“项目集合”,一个表示“红色项目集合”的子类和一个表示“大红色项目集合”的子类。拥有:
public class Items
{
public void add(Item item) { ... }
}
public class RedItems extends Items
{
@Override
public void add(Item item)
{
if (!item.isRed())
{
throw new NotRedItemException();
}
super.add(item);
}
}
public class BigRedItems extends RedItems
{
@Override
public void add(Item item)
{
if (!item.isBig())
{
throw new NotBigItemException();
}
super.add(item);
}
}
没关系 - RedItems 始终可以确信它包含的项目都是红色的。现在假设我们能够调用 super.super.add():
public class NaughtyItems extends RedItems
{
@Override
public void add(Item item)
{
// I don't care if it's red or not. Take that, RedItems!
super.super.add(item);
}
}
现在我们可以添加任何我们喜欢的东西,并且不变量被打破了。RedItems
这有意义吗?