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

问题:为什么Java不允许super.super.method();

我想出了这个问题,认为这个是很好解决的(也不是没有它就不行的)如果可以像下面那样写的话:

@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的含义就被破坏了,也就失去意义了

文章翻译自Stack Overflow:https://stackoverflow.com/questions/586363/why-is-super-super-method-not-allowed-in-java

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值