gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 14:58:44 24 4
gpt4 key购买 nike

我读到this question并认为如果有人可以写的话,这个问题很容易解决(并不是说没有就无法解决):

@Override
public String toString() {
return super.super.toString();
}

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

大家觉得怎么样?

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

最佳答案

它违反了封装性。您不应该能够绕过父类的行为。有时能够绕过您自己的类的行为(特别是在同一方法中)而不是您父类的行为是有意义的。例如,假设我们有一个基础“项目集合”,一个代表“红色项目集合”的子类以及代表“大红色项目集合”的子类。这是有意义的:

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 中的不变量被破坏。

这有意义吗?

关于java - 为什么是 super.super.method(); Java中不允许?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22879646/

24 4 0
文章推荐: html -
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com