我最近学习了大约 3 种新语言,但我开始对它们感到困惑。几年来我没有使用 Java 来做任何特别复杂的事情(在 android 之外)。我记不起这是否可能:
我将 ArrayList 子类化主要是为了让 arraylist 保持有序。我试图重写 add(object)
方法,但我希望它返回一个 int 而不是 boolean 值(添加的对象的位置)。但是我在方法的返回类型上遇到错误。
我想要的东西甚至可以用语言实现吗?能否让子类中的方法返回与父类(super class)方法不同的东西?
或者我想做一些愚蠢的事情?这是否打破了继承的 is-a
理念?我应该只封装一个数组列表而不是扩展它吗?
作为引用,我正在尝试做的一部分:
public class AuthorArray extends ArrayList \{
@Override
public int add(Author object) {
super.add(object);
Collections.sort(this, new SortByLastName());
return this.indexOf(object);
}
}
最佳答案
Can you have a method in a subclass return something different than the superclass' method?
一般来说,不会。唯一的异常(exception)是协变返回类型,当重写方法返回基类/接口(interface)方法中返回类型的子类时。这在 Java5 中成为可能,并且是一种很好的做法。但您的情况不属于此类。
Is this breaking the is-a idea of inheritance?
是。 ArrayList
的用户希望从 add
中得到一个 boolean
返回值,并按照他们添加它们的相同顺序查看元素,您会中断那种期待。不要那样做。
Should I just encapsulation an arraylist instead of extending it?
是的。然后您可以使用您喜欢的任何契约(Contract)定义自己的接口(interface)。但首先,考虑使用 TreeSet
相反。
关于java - 改变java中子类方法的语义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3800092/