簡體   English   中英

在抽象方法的實現中無法返回抽象類的子類

[英]Cannot return subclasses of abstract class in implementations of an abstract method

我有一個抽象類的兩個子類,每個子類都實現其父類的抽象方法。 我希望每種返回類型都有不同的返回類型,盡管這些返回類型又是不同抽象類的子類。 見下文:

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 {}

顯然,Java不允許我這樣做,但是我對如何獲得此功能一無所知。 有任何想法嗎?

使用通配符:

public abstract class Gardener {

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

}

您可以使用如下泛型:

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 {}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM