【问题标题】:Is it possible to have alternating conditions in a method in Java?Java中的方法可以有交替的条件吗?
【发布时间】:2017-06-02 00:45:50
【问题描述】:

所以我想在 Java 中创建一个多态类数组。这是一组动物,我想在数组中添加不同种类的动物。 Animal 是超类,不同种类的动物是子类,我需要实现一个方法,根据属性将特定动物添加到数组中,但由于各种动物具有不同的属性,我不知道如何去做。 到目前为止,我有这个基本方法并且可以编译:

public void addAnimal(String name, double weight) {
        if ((numberanimals < animals.length) && (numberanimals == 0)) {
            animals[0] = new Animal(name, weight);
            numberanimals += 1;
        } else if (numberanimals < animals.length) {
            animals[numberanimals] = new Animal(name, weight);
            numberanimals += 1;
            } else {
                System.out.println("Zoo is full.");
            }
}

所有动物都有名字和重量,但我如何添加一条狗,例如根据他的皮带长度或一条带有布尔值的鲨鱼,表示他是否饿了。有没有可能用这样的一种方法做到这一点?

【问题讨论】:

  • 通常您会先创建动物并将其传递给addAnimal(Animal a)(如addAnimal(new Giraffe("Shorty")))。
  • 您应该将方法更改为public void addAnimal(Animal animal),它将能够接收任何类型的动物(继承自Animal的类)。然后在调用方法之前创建动物。
  • 您可以对超类使用抽象谓词方法,并在子类中使用不同的选择条件覆盖它。
  • Addanimal 然后可以使用重写的方法来决定是否添加子类的实例。

标签: java inheritance polymorphism subclass superclass


【解决方案1】:
  1. 每个Crocodile 都是一个Animal
  2. Animal 保证可以访问 Animal 方法和公共字段。
  3. 您可以使用animal instanceOf Crocodile 检查Animal 是否为Crocodile
  4. 如果是鳄鱼,可以投:Crocodile croco = (Crocodile)animal;
  5. 您可以将Crocodile 添加到Animal[]List&lt;Animal&gt;,因为它是Animal
  6. 每个对象都是instanceOf Object,因为所有类都扩展Object

你的方法应该是:

public void addAnimal(Animal a){
    if ((numberanimals < animals.length) && (numberanimals == 0)) {
        animals[0] = a;
        numberanimals += 1;
    } else if (numberanimals < animals.length) {
        animals[numberanimals] = a;
        numberanimals += 1;
        } else {
            System.out.println("Zoo is full.");
        }
    }
}

然后您可以使用任何Animal - Lion - addAnimal(new Lion(...)); 等调用它。

【讨论】:

    【解决方案2】:

    您可以通过调用“instanceof”来检查实例的确切类。 例如:

    if(animals[i] instanceof Dog) {
     //do something
    }
    

    【讨论】:

    • 这帮助我完成了另一项任务,但是我该如何使用狗的属性。 animals[i].leash 例如不起作用。
    • 您必须先将其转换为 dog,因为 Animal 类没有 leash 属性。 ((Dog)animals[i]).leash 你必须确保它是一个 Dog 类实例!!
    猜你喜欢
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    • 2011-08-20
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    相关资源
    最近更新 更多