【发布时间】:2017-05-06 18:23:33
【问题描述】:
第一次在这里发帖。刚开始学习Java和一般的编码,所以请耐心等待!
所以我在这里有几节课。一个水果类,有 2 个子类 - 橙子和西瓜。
public class Fruit {
String name;
String size;
public Fruit() {
this.name = "Fruit";
this.size = "";
}
public String getName() {
return this.name;
}
public String getSize() {
return this.size;
}
}
class Orange extends Fruit {
public Orange() {
this.name = "Orange";
this.size = "Small";
}
}
class Watermelon extends Fruit {
public Watermelon() {
this.name = "Watermelon";
this.size = "Large";
}
}
我还有一个 Crate 类,我想存储水果对象。但是,我希望它根据传递给构造函数的 String 来存储特定对象。
public class Crate {
Fruit f = new Fruit();
public Crate(String fruitType) {
if (fruitType == "Orange") {
f = (Orange)f;
} else {
f = (Watermelon)f;
}
}
public String getFruitName() {
String s = f.getName();
return s;
}
}
试图像这样沮丧会给我一个错误。我的问题是如何根据传递给构造函数的内容向 Crate 对象添加某个 Fruit 子类?
编辑:谢谢大家的建议。进行了建议的更改,效果很好!
【问题讨论】:
-
字符串应该像
if(fruitType.equals("Orange"))这样比较,尽管像Javascript和C#这样的其他语言接受与==比较的字符串,Java不会不以同样的方式工作。 -
你的“工厂”在我看来是错误的,演员不是某种可以转化物体的巫师
-
== 测试引用相等性(它们是否是同一个对象)。