我希望我能清楚地解释这一点。我有一个具有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构造函数更改为使用varargs

public Animal (String... eats) {
//                   ^^^
    this.eats = eats;
}


这仍然允许您将eats视为字符串数组(String[]),因此可以毫无问题地将其分配给this.eats,但是现在Lion构造函数可以如下所示:

public Lion() {
    super("steak", "celery");
}

关于java - 需要以串状表示动物可以吃的食物,但要有食物,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34166802/

10-10 10:10