Java继承和泛型

PhD*_*hDP 1 java generics inheritance abstract

我试图用泛型扩展一个抽象类,我遇到了一个问题:

abstract public class SomeClassA<S extends Stuff> {
  protected ArrayList<S> array;

  public SomeClassA(S s) {
    // ...
  }

  public void someMethod() {
    // Some method using the ArrayList
  }

  abstract public void anotherMethod() {
    // ... 
  }
}
Run Code Online (Sandbox Code Playgroud)

现在我想用另一个抽象类扩展这个类,所以我可以覆盖"someMethod".我试过了:

abstract public class SomeClassB<Z extends Stuff> extends SomeClassA {

  public SomeClassB(Z z) {
    super(z);
  }

  @Override public void someMethod() {
    // Some method using the ArrayList
  }

}
Run Code Online (Sandbox Code Playgroud)

NetBeans没有看到构造函数的任何问题,但我不能在someMethod方法中使用SomeClassA中的ArrayList.所以我尝试过:

abstract public class SomeClassB<Z extends Stuff> extends SomeClassA<S extends Stuff> {

  public SomeClassB(Z z) {
    super(z);
  }

  @Override public void someMethod() {
    // Some method using the ArrayList
  }

}
Run Code Online (Sandbox Code Playgroud)

而现在它只是非常奇怪.一切似乎都有效(我现在可以使用arraylist,但是NetBeans说在SomeClassB的声明中有一个"> expected",它只是不会编译.如果可能的话,我想:

  1. 要知道如何解决这个特殊问题.

  2. 要有一个很好的参考来理解泛型.

  3. 要知道它在C#中是否更容易.

mdm*_*dma 10

您还需要将泛型类型传递给超类,如下所示:

abstract public class SomeClassB<Z extends Stuff> extends SomeClassA<Z>
Run Code Online (Sandbox Code Playgroud)

然后,您的超类和子类将使用相同的泛型类型.通用类型不是由子类继承或传递给超类.