我读了this question篇文章,认为如果一个人能写下:

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

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

你们怎么看?

EDIT:

推荐答案

它违反了封装.你不应该绕过父类的行为.有时可以绕过own类的行为(尤其是在同一个方法中),但不能绕过父类的行为,这是有道理的.例如,假设我们有一个基本的"项集合",一个表示"红色项集合"的子类,以及一个表示"大红色项集合"的子类.这样做是有道理的:

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.超级的添加():

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相关问答推荐

Spring Jpa findById会导致StackOverFlow错误,但其他查询没有问题

Java中Stream(java.util.stream)和linkedList数据 struct 之间是什么关系?

如何从片段请求数据到活动?在主要活动中单击按钮请求数据?

我应该避免在Android中创建类并在运行时编译它们吗?

如何审查Java dtos中的自定义注释字段?

如何转换Tue Feb 27 2024 16:35:30 GMT +0800 String至ZonedDateTime类型""

在Java Stream上调用collect方法出现意外结果

只需最少的代码更改即可将版本号标记添加到日志(log)

内存中的H2修剪尾随空格

解释左移在Java中的工作原理

与Spring Boot相关的实体未正确保存

多重延迟签名

Java构造函数分支

如何在JavaFX循环中完美地制作一个AudioClip/MediaPlayer?

使用正则表达式从字符串中提取多个值

S数学.exp的相同错误保证也适用于StrictMath.exp吗?

使用for循环时出现堆栈溢出错误,但如果使用if块执行相同的操作,则不会产生错误

使IntelliJ在导入时优先 Select 一个类或将另一个标记为错误

为什么项目名称出现在我的GET请求中?

OpenJDK20:JEP434:Foreign Function&;内存API(第二次预览)