它违反了封装。你不应该能够绕过父类的行为。有时能够绕过你自己的类的行为(尤其是从同一方法中)而不是你父母的行为是有意义的。例如,假设我们有一个基本的“项目集合”,一个代表“红色项目集合”的子类,一个代表“大红色项目集合”的子类。拥有:
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); }}现在我们可以添加所需的任何内容,并且in不变
RedItems。
那有意义吗?



