gpt4 book ai didi

java - 如何正确扩展这个抽象类?

转载 作者:行者123 更新时间:2023-12-02 05:05:22 25 4
gpt4 key购买 nike

嗨,我对 Java 缺乏经验。我理解继承的概念,但我认为语法让我困惑。我正在寻求一些帮助来开始扩展这个抽象类:我需要从中创建一个具体的对象。

这个类应该做的是在初始化期间接受一个类型并存储该类型的对象列表。对它们进行排序,然后在调用 showTopN 时返回包含前 n 个对象的列表。

我还没有开始实现逻辑。

abstract class Foo<T extends Comparable<T>> {
int n;

Foo(int n){ // constructor; sets object property n
this.n = n;
}

abstract void push(T object); //object method to store a new object in the list

abstract List<T> showTopN(); // object method to return top n entries in the list, sorted.
}

我尝试以这种方式将其扩展为具体对象:

class ConcreteFoo extends Foo {

private List<Foo> fooList;

public void push(Foo object) {

}

@Override
public List<Foo> showTopN() {
return fooList;
}

@Override
public int compareTo(ConcreteFoo other) {
return 0;
}
}

但是编译器提示我没有重写 Push 方法。怎么了?

最佳答案

这里发生了两件事。一是 Foo 的“抽象性”,二是泛型。您忽略了泛型方面。

如果你知道你的 Concrete foo 关心的对象类型,你可以使用它:

class ConcreteFoo extends Foo<SomeKnownClass> {
private List<SomeKnownClass> list = new ArrayList<SomeKnownClass>();
void push(SomeKnownClass skc) {}
List<SomeKnownClass> showTopN() { return list; }
}

现在,如果您知道它的类型,您仍然可以使用泛型:

class ConcreteFoo<T extends Comparable<T>> extends Foo<T> {
private List<T> list = new ArrayList<T>();
void push(T skc) {}
List<T> showTopN() { return list; }
}

请注意,FooConcreteFoo 均未实现 Comparable,因此您不需要 compareTo 方法。

关于java - 如何正确扩展这个抽象类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27851377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com