我有一个带有方法签名的Java函数
public void myMethod (int someInt, String someString)
在我的抽象类中,我用方法覆盖了它
public void myMethod (Integer someInt, String someString)
搭便车不起作用。这是矛盾之处吗?我认为自动装箱也适用于方法签名替代。
int
和Integer
是两种不同的类型。自动装箱模糊的程序员的方便的源代码级的区别,但不会改变的事实,他们事实上是两个 非常 不同的类型。
因此,你不能@Override
接受一个方法int
有一个接受一个Integer
反之亦然,副。
请注意,在声明采用Integer
而不是的方法之前,您可能应该三思而后行int
。这是摘自 Effective Java 2nd
Edition,第49项:首选原语而
不是 盒装原语 :
总之,只要有选择,就优先于框式基元使用基元。基本类型更简单,更快速。如果必须使用盒装原语,请当心!自动装箱减少了使用装箱原语的冗长程度,但没有危险。当程序将两个装箱的原语与
==
运算符进行比较时,它将进行身份比较,几乎可以肯定这不是您想要的。当您的程序进行涉及装箱和拆箱原语的混合类型计算时,它会进行拆箱,而当您的程序进行拆箱时,它会抛出NullPointerException
。最后,当您的程序将原始值装箱时,可能会导致创建昂贵且不必要的html" target="_blank">对象。
在某些地方您别无选择,只能使用盒装基元,例如泛型,但是否则您应该认真考虑是否有理由使用盒装基元的决定。
问题内容: 这个问题来自一个作业。我必须在创建循环链接列表的类中重写toString()方法,而实际上我的toString()方法效果很好,它通过了我所有的测试。因此,我的项目是自动分级的,显然它不是100%赞成我的方法。所以我的问题是:有没有更好的方法来编写此toString()方法,这样会更有效? 如果我需要详细说明类结构,以便更有意义,请告诉我。 问题答案: 使用StringBuilder。
问题内容: 我得到输出b 3。为什么它没有给出b13作为输出。任何人都可以解释一下。 问题答案: 假设Foo类声明如下 变量没有覆盖的概念。他们只是被蒙面。 它正在打印3,因为当您使用超类引用访问变量时,它仅访问在超类中声明的变量。 请记住,超类对子类一无所知。
问题内容: 我编写的代码应该覆盖所选文本文件的内容,但是会附加它。我到底在做什么错? 编辑 我尝试制作一个新的temp.txt文件并将新内容写入其中,删除此文本文件并将temp.txt重命名为该文件。事实是,删除总是不成功的。我认为我不必为此更改用户权限吗? 另外,程序的一部分列出了该目录中的所有文件,因此我猜它们正在被程序使用,因此无法删除。但是为什么不覆盖呢? 解决了 我最大的“ D’oh”时
问题内容: 这个想法有些含糊不清,我需要澄清。 我的问题是使用此代码时: 输出为。 这是因为main函数与method在同一类中,还是由于重写? 我已经在书中读过这个想法,当我将该函数放在另一个类中时,会出现编译器错误。 问题答案: 您不能覆盖方法。如果投射到,则看不到。您 可以 覆盖一个方法,但这不是您要在此处执行的操作(是的,在这里,如果将移至,则会得到另一个方法。我建议您在打算覆盖时注解,
问题内容: 在Java中重写私有方法是无效的,因为父类的私有方法是“自动最终的,并且对派生类是隐藏的”。我的问题主要是学术上的。 不允许父级的私有方法被“重写”(即,在子类中以相同的签名独立实现),这是否违反封装规范?根据封装的原理,子类不能访问或继承父级的私有方法。它是隐藏的。 那么,为什么应该限制子类实现自己的具有相同名称/签名的方法呢?这是否有一个良好的理论基础,还是仅仅是某种务实的解决方案
我正在开发一个Java中的图形库(https://github.com/aisthesis/java-graph2012 完整的上下文),并且需要覆盖权重边缘类的hashCode(),其中边缘不定向。也就是说,我设置了我的 equals() 覆盖方法,以便对于 2 个加权边 e1 和 e2,如果以下条件之一成立(from() 和 to() 方法返回边的尾部和头顶点),则它们相等: e1.从() =