为什么是super.super.method();Java中不允许?

我读了这个问题并认为如果你能写下以下内容,就很容易解决(不是说没有它就无法解决):

@覆盖
公共字符串toString(){
返回super.super.toString();
}

我不确定它在很多情况下是否有用,但我想知道它为什么不有用,以及在其他语言中是否存在类似的东西

你们觉得怎么样

编辑:
澄清一下:是的,我知道,这在Java中是不可能的,我并不真正怀念它。这并不是我期望的工作,我很惊讶得到一个编译器错误。我刚刚有了这个想法,并且喜欢讨论它

它违反了封装。您不应该绕过父类的行为。有时可以绕过你自己的类的行为(特别是在同一个方法中),而不是你父母的行为,这是有道理的。例如,假设我们有一个基本的“项目集合”,一个表示“红色项目集合”的子类和一个表示“大型红色项目集合”的子类。有必要:

公共类项目
{
公共无效添加(项目){…}
}
公共类项扩展了项
{
@凌驾
公共作废添加(项目)
{
如果(!item.isRed())
{
抛出新的NotRedItemException();
}
超级。添加(项目);
}
}
公共类BigRedItems扩展了RedItems
{
@凌驾
公共作废添加(项目)
{
如果(!item.isBig())
{
抛出新的NotBigItemException();
}
超级。添加(项目);
}
}

这很好-RedItems可以始终确信它包含的项目都是红色的。现在假设我们能够调用super.super.add():

公共类NottyItems扩展了RedItems
{
@凌驾
公共作废添加(项目)
{
//我不在乎它是不是红色。拿着,雷迪姆斯!
super.super.add(项目);
}
}

现在我们可以添加任何我们喜欢的内容,RedItems中的不变量被破坏了

这有意义吗

发表评论