在抽象方法的实现中不能返回抽象类的子类

Osc*_*ine -1 java inheritance abstract-class abstract

我有一个抽象类的两个子类,每个子类实现一个超类的抽象方法.我希望每个都有不同的返回类型,尽管这些返回类型又是不同抽象类的子类.见下文:

public abstract class Gardener {

    public abstract ArrayList<Flower> getFlowers();
}

public class GardererA extends Gardener {

    public ArrayList<Flower> getFlowers() {
        return new ArrayList<Daisy>();
    }
}

public class GardererB extends Gardener {

    public ArrayList<Flower> getFlowers() {
        return new ArrayList<Rose>();
    }
}

public abstract class Flower {}

public class Daisy extends Flower {}

public class Rose extends Flower {}
Run Code Online (Sandbox Code Playgroud)

显然Java不会让我这样做,但我对如何获得这个功能感到茫然.有任何想法吗?

Mor*_*hai 6

使用通配符:

public abstract class Gardener {

    public abstract ArrayList<? extends Flower> getFlowers();

}
Run Code Online (Sandbox Code Playgroud)


Dav*_*era 5

你可以使用这样的泛型:

public abstract class Gardener<T extends Flower> {

    public abstract ArrayList<T> getFlowers();
}

public class GardererA extends Gardener<Daisy> {

    public ArrayList<Daisy> getFlowers() {
        return new ArrayList<Daisy>();
    }
}

public class GardererB extends Gardener<Rose> {

    public ArrayList<Rose> getFlowers() {
        return new ArrayList<Rose>();
    }
}

public abstract class Flower {}

public class Daisy extends Flower {}

public class Rose extends Flower {}
Run Code Online (Sandbox Code Playgroud)