我正在尝试编写一个创建随机植物的方法,并将创建的植物的对象作为Plant
返回。在下面的示例中,方法createPlant()
的类型为Plant
,并返回子类Tree
的对象。事实证明我的思维方式是错误的。 Eclipse提供的错误是:“此方法必须返回Plant类型的结果”。那么我应该如何创建这样的方法呢?
public abstract class Plant {
...
}
public class Tree extends Plant {
...
}
public class Bush extends Plant {
...
}
public class Map {
private Plant plant;
...
public static Plant createPlant(float x, float y) { // This method must return a result of type Plant
Random generator = new Random();
switch (generator.nextInt(2)) {
case 0:
return new Tree(x, y);
case 1:
return new Bush(x, y);
}
}
}
答案 0 :(得分:0)
不,从面向对象的角度来看,这绝对没问题。植物是一般的实体,而树在某种程度上是专门的。
重点是树也是一种植物(is-a-relation),所以返回植物的方法可以返回任何至少与植物一般的东西,但也可能更专业。
答案 1 :(得分:0)
添加null
的默认案例。
switch (generator.nextInt(2)) {
case 0:
return new Tree(x, y);
case 1:
return new Bush(x, y);
default: // Requires default case
return null;
}
或创建一个虚拟NoPlant
类
public class NoPlant extends Plant {
...
}
现在以这种方式使用
switch (generator.nextInt(2)) {
case 0:
return new Tree(x, y);
case 1:
return new Bush(x, y);
default: // Requires default case
return new NoPlant();
}
- 编辑 -
也可以这样尝试
int random=generator.nextInt(2); // return either 0 or 1
if(random==0){
return new Tree(x,y);
}else{
return new Bush(x, y);
}