我希望我能清楚地解释这一点。我有一个具有eats属性的动物(抽象类),这是代表每个动物可以吃的东西的字符串数组。这就是我的动物课的样子。
public abstract class Animal {
String[] eats;
public Animal (String[] eats) {
this.eats = eats;
}
}
我还有一个狮子班,扩大了我的动物班。规格告诉我,我的狮子会吃芹菜和牛排。我的狮子类中的构造函数如下(它具有编译错误):
public Lion(String[] eats) {
this.eats = steak, celery;
}
我在一个食品类中创建了这两个食品对象,每个食品都有特定的健康价值和浪费价值。这是我的饮食课:
public class Food {
int healthGain;
int wasteGain;
public static void main(String[] args) {
Food steak = new Food();
steak.healthGain = +3;
steak.wasteGain = 4;
//same but for celery instead
}
}
我真的很困惑,因为我本来打算为每只动物吃的食物准备一些字符串,但是我创建的食物对象不是字符串(规范并没有要求我这样做,我只是看不到另一种方法)。有一个更好的方法吗?还是可以更改代码以进行编译?无论哪种方式,每只动物吃的食物都必须是一串串的。提前致谢。
最佳答案
您的狮子应该看起来像这样:
class Lion extends Animal{
public Lion() {
super(new String[]{"steak", "celery"});
}
//...
}
注意,实际上我们不需要构造函数中的任何参数,因为我们已经知道Lion所吃的食物,并且每次创建Lion对象时要求用户提供此信息都是很糟糕的。
顺便说一句,如果您想避免重复此
new String[]{...}
代码,请尝试将您的Animal
构造函数更改为使用varargspublic Animal (String... eats) {
// ^^^
this.eats = eats;
}
这仍然允许您将
eats
视为字符串数组(String[]
),因此可以毫无问题地将其分配给this.eats
,但是现在Lion构造函数可以如下所示:public Lion() {
super("steak", "celery");
}
关于java - 需要以串状表示动物可以吃的食物,但要有食物,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34166802/