不能在抽象方法的实现中 return 抽象 class 的子classes
Cannot return subclasses of abstract class in implementations of an abstract method
我有两个抽象class的子classes,每个子class都实现了它们的超class的抽象方法。我希望每个类型都有不同的 return 类型,尽管这些 return 类型又是不同抽象 class 的子 classes。见下文:
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<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 {}
使用通配符:
public abstract class Gardener {
public abstract ArrayList<? extends Flower> getFlowers();
}
我有两个抽象class的子classes,每个子class都实现了它们的超class的抽象方法。我希望每个类型都有不同的 return 类型,尽管这些 return 类型又是不同抽象 class 的子 classes。见下文:
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<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 {}
使用通配符:
public abstract class Gardener {
public abstract ArrayList<? extends Flower> getFlowers();
}