我读了this question篇文章,认为如果一个人能写下:
@Override
public String toString() {
return super.super.toString();
}
我不确定它在很多情况下是否有用,但我想知道它是否有用,以及在其他语言中是否存在类似的情况.
你们怎么看?
EDIT:
我读了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
中的不变量被打破了.
这有意义吗?