我读了这个问题,并认为如果可以写的话,很容易解决(不是没有它就不能解决):
@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);
}
}
现在我们可以添加所需的任何内容,并且in不变RedItems
。
那有意义吗?
问题内容: 我从编译器收到的错误是“分配的左侧必须是变量”。我的用例是深度复制,但并没有实际意义。 在C ++中,可以分配给。 问题不在于如何规避对的分配。这很简单,但是决定不进行变量的背后是什么原理。 原因是技术上的还是概念上的? 到目前为止,我的猜测-用随机方法重建对象的可能性容易出错(概念上),但在技术上是可行的。 编辑 请避免使用“因为Java规范这么说”的变体。我想知道 这个决定 的 原
问题内容: 我想知道Java中是否有特殊原因总是使用“ ”而不是“ ”来定义类型参数的界限。 例: 被禁止但是 是正确的。是什么原因呢? 问题答案: 在类“实现”还是“扩展”之间,通用约束语言没有语义差异。约束可能性是“扩展”和“超级”-也就是说,该类是可分配给其他类的对象(扩展),还是该类可从该类分配(超级)。
问题内容: 作为实验,我尝试扩展-array,如下所示: 在类本身中添加一些与排序,交换,子数组构建等有关的方法。但是我在编译时遇到了这个错误: 我很好奇:为什么Java不允许扩展数组? 问题答案: 扩展基本类型(例如a 或数组)会打开安全漏洞。如果Java允许您扩展数组,则采用数组的方法将变得不安全。这就是字符串为,而数组根本不能扩展的原因。 例如,您可以重写该方法,并返回不正确大小的数组。这有
问题内容: 我想理解为什么做出这个决定。通用异常有什么问题? (据我所知,泛型只是编译时的语法糖,Object无论如何它们都将转换为.class文件,因此有效地声明泛型类就好像其中的所有内容都是Object。。如果我错了,请更正我) 问题答案: 正如标记所说,类型是不可更改的,在以下情况下会出现问题: 两者和都被擦除为相同类型,JVM无法区分异常实例,因此也无法确定应执行哪个块。
问题内容: 为什么无法覆盖静态方法? 如果可能,请使用示例。 问题答案: 覆盖取决于拥有类的实例。多态性的重点是可以对一个类进行子类化,并且实现那些子类的对象对于在超类中定义的相同方法(在子类中被重写)将具有不同的行为。静态方法未与类的任何实例相关联,因此该概念不适用。 影响Java设计的因素有两个。一个是对性能的关注:Smalltalk批评它太慢(垃圾回收和多态调用是其中的一部分),Java的创
问题内容: W3指定表列(带有元素)仅允许使用四个CSS规则- 边框,背景,宽度和可见性。 有人知道这个决定的原因吗?如果可以使用边框和背景,为什么不使用字体和颜色呢? 问题答案: IanHixie在这里详细解释:为什么只有四个属性应用于表列的奥秘。相关报价: 文本的颜色取决于其元素的“颜色”属性。除非指定,否则“ color”属性(基本上)默认为“ inherit”,这意味着“采用父元素的值”。